柵格資料具備空間資訊,因此每一個象元都具備空間屬性和數值屬性資料。擷取柵格象元的空間屬性以及數值屬性,對於進行矢柵多模融合分析具有十分重要的意義。
新增函數
GanosBase在4.3版本增加將柵格象元轉換為空白間幾何對象以及數值的系列函數。
函數名稱 | 描述 | 參考文檔 |
ST_PixelAsPolygon | 用於返回柵格中指定象元所代表的空間範圍,以矩形的方式返回geometry對象。 | |
ST_PixelAsPoint | 用於返回柵格中指定象元所代表的空間範圍,以點的方式進行返回,可以指定代表的點位左上方點或中心點。 | |
ST_PixelAsCentroid | 用於返回柵格中指定象元所代表的空間範圍,以中心點的方式進行返回幾何對象。 | |
ST_PixelAsPolygons | 用於返回柵格對象中所有象元的空間和屬性資訊。返回的結果包括象元在柵格對象中的行號,列號,波段號,像素值以及對應的空間多邊形範圍。 | |
ST_PixelAsPoints | 用於返回柵格對象中所有象元的空間和屬性資訊。返回的結果包括象元在柵格對象中的行號,列號,波段號,像素值以及對應的空間點資訊。空間點可以指定象元的左上方點或中心點。 | |
ST_PixelAsCentroids | 用於返回柵格對象中所有象元的空間和屬性資訊。返回的結果包括象元在柵格對象中的行號,列號,波段號,像素值以及對應的象元空間範圍中心點資訊。 |
最佳實務
已知中國的氣象溫度資料(柵格)以及裝置的空間位置分布情況(向量),需要尋找溫度在一定範圍內的裝置資訊。本案例可以展示GanosBase向量和柵格進行統一分析能力。同時,也可以擴充為根據DEM來尋找高程在一定範圍內的裝置等情境。 基礎資料包括:
中國的氣溫netcdf資料。
中國的裝置點信shapefile格式。
本案例的空間參考均為WGS84。
資料入庫
溫度資料入庫
-- 建立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));資料插入成功後,可通過以下SQL語句查看中繼資料資訊:
-- 查看中繼資料資訊
SELECT st_metadata(rast) FROM temperature WHERE id =1;裝置資料入庫
--建立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);以上通過fdw方式將OSS中的裝置資料匯入到資料庫中,更多其他資料入庫方案請參考向量柵格資料快速入庫。
提取溫度範圍
當前案例中最核心的功能是將基於柵格的溫度轉換為向量空間範圍並進行分析計算。轉換的思路是將每個符合溫度要求的象元的空間範圍進行合并,最終獲得整體空間範圍,具體的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 < 280;然而,當柵格解析度較高時,該SQL語句由於需處理每個像素值,導致效能較低。對應可以使用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;空間疊加分析
將擷取的向量空間範圍與裝置表做一個空間內含項目關聯性判斷,獲得符合要求的裝置資訊:
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總結
利用GanosBase的時空柵格儲存、計算和分析能力,將複雜的向量柵格多模融合分析功能轉化為簡潔的Geo-SQL語句。這使得以往依賴GIS軟體進行的專業時空資料處理流程能夠在資料庫內實現,從而簡化程式邏輯,降低開發複雜度與維護成本,使雲GIS能力賦能行業使用者。