天天看點

Ganos 4.3新特性:擷取栅格象元空間範圍1. 簡介2. 實戰步驟3. 總結

1. 簡介

栅格資料具備了空間資訊,是以每一個象元都具備了空間屬性以及數值屬性資料。擷取栅格象元的空間屬性以及數值屬性,對于進行矢栅多模融合分析具有十分重要的意義。

1.1 GanosBase

GanosBase(簡稱Ganos)是阿裡雲智能研發的新一代時空資料庫引擎,采用了平台即服務、多模融合、計算下推和雲原生全新處理架構,為政府、企事業機關、泛網際網路客戶提供移動對象、空間/時空、遙感多模态資料混合存儲、查詢與分析服務。

GanosBase已嵌入到RDS PG、PolarDB PG、ADB PG、Lindorm等雲原生資料庫産品中,本文所介紹的功能特性包含在

RDS PG

/

PolarDB ADBPG

中。

1.2 新增函數

Ganos 4.3 中新增了将栅格象元轉換為空間幾何對象以及數值的系列函數,包括:

1.2.1 ST_PixelAsPolygon

傳回栅格中指定象元所代表的空間範圍,以矩形的方式傳回geometry對象。

Ganos 4.3新特性:擷取栅格象元空間範圍1. 簡介2. 實戰步驟3. 總結

1.2.2 ST_PixelAsPoint

傳回栅格中指定象元所代表的空間範圍,以點的方式進行傳回,可以指定代表的點位左上角點或中心點。

Ganos 4.3新特性:擷取栅格象元空間範圍1. 簡介2. 實戰步驟3. 總結
Ganos 4.3新特性:擷取栅格象元空間範圍1. 簡介2. 實戰步驟3. 總結

1.2.3 ST_PixelAsCentroid

傳回栅格中指定象元所代表的空間範圍,以中心點的方式進行傳回幾何對象

Ganos 4.3新特性:擷取栅格象元空間範圍1. 簡介2. 實戰步驟3. 總結

1.2.4 ST_PixelAsPolygons

傳回栅格對象中所有象元的空間和屬性資訊。傳回的結果包括象元在栅格對象中的行号,列号,波段号,像素值以及對應的空間多邊形範圍。

1.2.5 ST_PixelAsPoints

傳回栅格對象中所有象元的空間和屬性資訊。傳回的結果包括象元在栅格對象中的行号,列号,波段号,像素值以及對應的空間點資訊。空間點可以指定象元的左上角點或中心點。

1.2.6 ST_PixelAsCentroid

傳回栅格對象中所有象元的空間和屬性資訊。傳回的結果包括象元在栅格對象中的行号,列号,波段号,像素值以及對應的象元空間範圍中心點資訊。

2. 實戰步驟

本案例中,已知全國的氣象溫度資料(栅格)以及裝置的空間位置分布情況(矢量),需要查找溫度在一定範圍的裝置資訊,來示範Ganos矢量和栅格進行統一分析能力。此案例也可以擴充為根據DEM來查找高程在一定範圍内的裝置等場景。

資料包括:

  • 全國的氣溫netcdf資料
  • 全國的裝置點資訊 shapefile格式

空間參考均為WGS84.

Ganos 4.3新特性:擷取栅格象元空間範圍1. 簡介2. 實戰步驟3. 總結

2.1 資料入庫

借助于Ganos的能力,可以将netcdf與shapefile資料快速導入到資料庫中:

2.1.1 溫度資料入庫

-- 建立Ganos Raster擴充
CREATE EXTENSION GANOS_RASTER CASCADE;
-- 建立溫度表
CREATE TABLE temperature(id integer, rast raster);
-- 導入netcdf溫度資料,需要設定空間參考為4326
INSERT INTO temperature 
VALUES (1, ST_SetSrid(ST_ImportFrom('chunk_table', 'OSS://<id>:<key>@<endpoint>/bucket/path/file.nc'), 4326));
-- 可以檢視中繼資料資訊
select st_metadata(rast) from temperature where id =1;
----------
 {"attributes":{"id":"237a4cc5-1b8a-4938-a4e1-ca62766056fb","name":"","type":"normal","version":1.1,"
storage":{"mode":"internal","location":"chunk_table","md5":"","endian":"ndr","compress":"lz4","compre
ssQuality":75,"fileSystem":"null","chunking":{"enable":true,"chunkHeight":256,"chunkWidth":256,"chunk
Band":1,"rowChunksDimension":5,"columnChunksDimension":9,"bandChunksDimension":1},"cellType":"16bsi",
"interleaving":"bsq"},"description":"","width":2101,"height":1237,"bands":1,"pyramid":{"resample":"ne
ar","level":0,"table":""},"overview":{"table":"","column":"","pyramidLevel":1},"referenceOriginPoint"
:{"type":"Raster","ulp":{"row":0,"column":0,"band":0},"rrp":{"row":0,"column":0,"band":0},"wrp":{"x":
0,"y":0,"z":0}}},"spatialReference":{"valid":true,"srid":4326,"refLocation":"upperleft","affline":{"u
pperleftx":72.985,"upperlefty":54.09500183179541,"scalex":0.03,"scaley":-0.03000000148143583,"skewx":
0.0,"skewy":0.0},"gcps":{"count":0}},"bands":{"b0":{"nodata":{"valid":true,"value":-32767.0},"colorIn
terpretation":"Undefined","metadata":{"long_name":"Maximum temperature of 2 meters","NETCDF_VARNAME":
"TEM_Max_2m","Spatial_resolution":"3km*3km","time":"202105012330","units":"°C *10"},"histogram":{"app
roximate":true}}},"metaData":{"TEM_Max_2m#long_name":"Maximum temperature of 2 meters","TEM_Max_2m#Sp
atial_resolution":"3km*3km","TEM_Max_2m#time":"202105012330","TEM_Max_2m#units":"°C *10"}}      

2.1.2 裝置資料入庫

Ganos支援将OSS上的shapefile通過fdw的方式導入到資料庫中

--建立Ganos fdw擴充
CREATE EXTENSION ganos_fdw;
--建立Shapefile的fdw表
select ST_RegForeignTables('OSS://<id>:<key>@<endpoint>/bucket/path/file.shp') );
--資料入庫到資料庫中并建立空間索引
CREATE TABLE devices AS SELECT * from <foreign_table_name> ;
CREATE INDEX idx_devices_geom ON devices USING Gist(geom);      

2.2 提取溫度範圍

此案例中最核心的功能是将基于栅格的溫度轉換為矢量空間範圍并進行分析計算。轉換的思路是将每個符合溫度要求的象元的空間範圍進行合并,最終獲得整體空間範圍,具體的SQL為:

-- 查找溫度大于 27 °C 且小于28 °C 象元為例
WITH tmp AS (
 SELECT (ST_PixelAsPolygons(rast)).*
 FROM temperature 
  WHERE id = 1)
SELECT ST_Union(geom) 
FROM tmp 
WHERE value >= 270 AND value < 279;      

當然這樣的寫法對于栅格分辨率較高時,由于需要處理每個像素值,性能較低。

可以通過配合 ST_Reclassify 函數先将無效的資料處理為Nodata值降低資料處理量,具體參見ST_Reclassify函數:

-- 先執行重分類操作
With tmp As(
 SELECT ST_Reclassify(rast, 
                      '[{"band":0,"remap":{"(-100,270,280, 1000]":"0,1,0"}, "nodata":false, "nodataValue":0}]', 
                      '{"chunktable":"reclass_chunk_table"}') AS rast
from temperature 
where id =1 ),
-- 再傳回空間範圍
tmp2 AS (
  SELECT (ST_PixelAsPolygons(rast)).*
FROM tmp)
SELECT ST_Union(geom) 
FROM tmp2;      

2.3 空間疊加分析

将步驟2.2 中獲得的空間範圍與裝置表做一個空間包含關系判斷,獲得符合要求的裝置資訊:

WITH tmp AS (
 SELECT (ST_PixelAsPolygons(rast)).*
 FROM temperature WHERE id = 1),
tmp2 AS (
  SELECT ST_Union(geom) as geom
 FROM tmp 
 WHERE value >= 270 AND value < 279)
SELECT count(*) -- 可以選擇任何的列資訊,此處以計算數量為例
FROM devices, tmp2
WHERE ST_Contains(tmp2.geom, devices.geom);
-- 最終結果
 count 
-------
  1879      

3. 總結

利用Ganos的時空栅格存儲、計算和分析能力,将複雜矢量栅格多模融合分析功能轉化為簡單的Geo-SQL語句,使得過去必須借助于GIS軟體的專業的時空資料處理流程能在資料庫内實作,簡化使用者的程式邏輯,降低開發複雜度與維護成本, 使雲GIS能力賦能行業使用者。

關于TST

TST團隊(Team of Spatio-Temporal kernel)由來自資料庫、計算機圖形圖像、3S等不同領域技術專家構成,是懷揣共同夢想——讓80%行業用到時空雲計算、迸發着活力和激情的一群創業者。團隊主攻雲上時空核心引擎技術架構、算法、系統平台研發與應用,緻力于将時空資訊處理嵌入到PaaS雲計算基礎設施,使之成為新一代數字架構的基礎次元普惠到更多使用者。歡迎加入!