本文介紹了柵格模型的用途、基本構成和快速入門等內容。
模型用途
簡介
柵格模型由按行和列(或格網)組織的像元(或像素)矩陣組成,其中的每個像元都包含一個信息值(例如溫度),柵格模型承載了數字航空像片、衛星影像、數字圖片、掃描地圖等柵格數據的存儲與計算。
Ganos Raster是對象關系型數據庫PostgreSQL兼容版本(PolarDB PostgreSQL版)的一個時空引擎擴展,使上述數據庫能夠有效快速存儲管理柵格類型數據,同時支持多源柵格數據(如遙感、攝影測量和專題地圖)之間的融合與分析,并提供了GeoServer插件幫助用戶將庫內柵格對象發布為OGC標準的服務(如WMS或WMTS等)。Ganos Raster可用于包括氣象、環境監測、地質勘探、自然資源管理、國防、應急響應、電信、傳媒、交通、城市規劃以及國土安全等領域。
功能概述
Ganos Raster兼容多種外部格式的直接輸入,例如,Tiff、IMG、HDF、NetCDF、GRIB等,已入庫的Raster對象同樣也可以導出為前面介紹的多種外部格式。
柵格數據入庫后,用戶可以查詢柵格對象的基本屬性信息、波段統計信息、像素值統計信息并通過多種方式獲取像素矩陣。
用戶也可以對Raster對象進行多種操作,例如投影轉換、裁剪、波段運算、鑲嵌,勻色等。
Raster提供了動態瓦片能力用于柵格對象的快速可視化。
主要業務場景
在實際應用中,Raster可以用于柵格數據存儲和分析的各類場景:
智慧農業
Ganos Raster支持海量遙感衛星數據的高效存儲與查詢。通過對多種來源的空間專題數據與遙感影像數據的聯合查詢、波段計算與空間統計等操作,解決各種農業生產數據分析相關的問題,并對接DataV提供豐富多樣的地圖、統計圖表對數據進行可視化展示,從而指導各類農業生產活動高效運行。
氣象水文預測
Ganos Raster支持HDF、NetCDF、Grib等常用的氣象水文領域標準數據格式的入庫與快速查詢,同時提供了空間插值、等值線/等值面提取等功能,可快速獲取氣象水文業務中的關鍵業務信息,為防災提供關鍵技術支持。
金融保險服務
基于Ganos Raster提供的衛星遙感影像波段計算與分類相關技術,用戶可以在不同時間空間條件下快速對作物類型、面積和長勢進行統計分析,并結合農戶對耕地的自證、政府機構登記的土地流轉數據,以及氣候、地理位置、行業景氣度等情況,利用行業內專業的風控模型預估產量和產值,從而為農戶提供信貸額度和合理的還款周期。
基本構成
Raster模型概述
數據模型主要包括以下幾個元素構成:
Raster:泛指一份柵格數據。例如,一個景遙感影像、一個TIFF文件等。
Tile:數據分塊,為一系列像素的集合。Tile為Raster對象在數據庫中存儲的基本單元,一般每個Tile包含256x256個像素值。
Band:由多個Tile構成的2D柵格數據圖層,每個Tile擁有一個行列號。
Cell:表示Tile中的一個像素,可以擁有不同的數據類型。例如Byte,Short,Int,Double等。
Pyramid:通過逐級抽稀的柵格金字塔,方便快速顯示。每個Pyramid包含不同的層級,每個層級對應一個Layer,第0層代表原始數據。
Metadata:柵格的存儲元數據,包括:空間范圍、投影類型、像素類型等。
如上圖所示,Ganos Raster采用了一種簡單而高效的通用柵格數據模型來管理專題數據和遙感影像數據。一幅柵格數據(Image)在數據庫中以柵格對象(Raster)形式進行存儲。Raster對象邏輯上由若干可以表示為2D柵格圖層的波段(Band)組成,各個Band的信息會在入庫過程中從原始影像數據讀取。Raster是以數據塊(Tile)為基本存儲單元進行存儲和管理的,Tile的尺寸默認為256x256像素,但也可以由用戶進行定義。每個Tile可以包含一個或者多個Band。Tile中的一個像素由一個像素單元(Cell)表示。每一個Raster對象都有對應的元數據(Metadata)信息,如圖幅范圍(Extent)、數據類型、投影信息、行列號等。 如果對柵格數據創建了金字塔模型,則一個Band會包含多個層級(level)的金字塔數據。
空間參考系
空間參考系(Spatial Reference System,以下簡稱為 SRS)定義了如何將Raster對象關聯到地球表面上某個具體位置。
Ganos使用一個整數來表示SRS的定義引用,稱為SRID。Raster對象通過其自身的SRID值與SRS關聯。
更多內容請參見空間參考。
數據列視圖
在Ganos中,raster_columns是從數據庫系統目錄表中讀取全部柵格列的視圖,其結構如下所示:
列名 | 類型 | 說明 |
r_table_catalog | varchar(256) | 一般為固定值postgres。 |
r_table_schema | varchar(256) | 該表所在的schema。 |
r_table_name | varchar(256) | 該表的表名。 |
r_raster_column | varchar(256) | 該表中某個Raster列的列名。 |
可以通過如下語句查詢當前數據庫中全部幾何數據列:
SELECT * FROM raster_columns;
索引
空間索引使Ganos處理大型空間數據集時避免對數據庫進行全局“順序掃描”。索引通過將數據組織到搜索樹中來加速搜索,可以快速遍歷該搜索樹以查找特定記錄。
Ganos為柵格數據提供了兩種索引方式:
索引名稱 | 索引說明 | 索引特點 |
Btree | Btree索引一般可作用于柵格文件名稱,通過對柵格文件名稱比對進行查找。 | Btree是數據庫最通用的索引方法,可以加速的查詢類型也最多。 |
GIN(Generalized Inverted Index) | 即通用倒排索引,通過這種索引結構可以快速的查找到包含指定關鍵字的元組,因此GIN索引特別適用于支持全文搜索,用戶可以對Raster字段類型創建此類索引。 | GIN索引對靜態數據是最好的,因為查找速度很快,但索引更新比GiST索引速度慢。 |
Ganos Raster的優勢
相較于開源空間數據庫PostGIS自帶的Raster插件,Ganos Raster在業務適配、存儲成本、計算能力方面都有明顯的優勢,主要體現在以下幾方面:
Ganos Raster存儲結構更加貼近業務需求
與PostGIS Raster完全柵格化的存儲方式不同,Ganos Raster提供了面向對象的存儲結構,一幅柵格數據(影像,圖像、DEM等)導入后直接對應Ganos Raster的一行記錄,對用戶而言形成了一對一的關系,清晰明了,單個對象的容量沒有限制,一行記錄可以保存大到1TB以上的超大影像/柵格。Ganos Raster屏蔽了直接對Tile進行操作的方式,可完整記錄柵格對象的元數據信息,并且與時序高度關聯,可以與業務進行更好的銜接。
Ganos Raster支持數據降本存儲
由于獨特的結構設計,針對海量影像分析這類存儲成本較大的場景,Ganos Raster支持將柵格元數據存儲在庫內,柵格屬性數據存儲在更為廉價的對象存儲上。這種情況下依然支持對柵格進行各類空間分析操作,同時可大幅度降低存儲成本。
Ganos Raster擁有更多時空算子
除了支持傳統的柵格空間關系判斷、柵格金字塔、柵格像素值、柵格屬性、柵格圖像處理等操作外,Ganos Raster還支持多種獨特的柵格統計、柵格代數操作,同時支持專業的圖像勻色算法和海量柵格概視圖實現渲染加速。
快速入門
簡介
快速入門幫助用戶快速理解Ganos Raster引擎的基本用法,包括擴展創建、建表、導入外部數據、查詢結果、創建金字塔、裁剪計算、結果導出等內容。
更多專業用法可參考Raster最佳實踐文章:
語法說明
創建擴展。
CREATE extension ganos_raster cascade;
說明建議將擴展安裝在public模式下,避免權限問題。
CREATE extension ganos_raster WITH schema public cascade;
創建柵格表。
CREATE TABLE raster_table(id integer, rast raster);
從OSS中導入柵格數據。
INSERT INTO raster_table VALUES(1, ST_ImportFrom('chunk_table','OSS://<ak>:<ak_secret>@oss-cn-internal.aliyuncs.com/bucket/data/image.tif'))
說明需要使用 OSS訪問域名使用規則 進行訪問。具體請參見對象存儲服務路徑。
<ak>
<ak_secret>
替換為實際access key和access secret。
查詢柵格對象信息。
SELECT ST_Height(rast),ST_Width(rast) FROM raster_table WHERE id = 1; ----------- 1241 (1 rows)
查詢指定波段統計信息。
SELECT ST_Statistics(rast,0) FROM raster_table WHERE id=1; --------------------- {"approximate":false,"min":8969.0,"max":12351.0,"mean":9407.330013839151,"std":193.4268180351078,"count":70091,"sum":659369168.0,"mode":9366.0,"median":9392.0} (1 row)
創建金字塔。
UPDATE raster_table SET rast = ST_BuildPyramid(rast) WHERE id = 1; UPDATE 1
根據視口的世界坐標范圍,長和寬來計算最佳的金字塔層級。
SELECT ST_BestPyramidLevel(rast, '((128.0, 30.0),(128.5, 30.5))', 800, 600) FROM raster_table WHERE id = 10; --------------------- 3
獲取柵格指定范圍的像素矩陣。
SELECT ST_Clip(rast, 0, '((128.980,30.0),(129.0,30.2))', 'World') FROM raster_table WHERE id = 1;
計算裁剪區域的像素坐標范圍。
SELECT ST_ClipDimension(rast, 2, '((128.0, 30.0),(128.5, 30.5))') FROM raster_table WHERE id = 10; ------------------------- '((600, 720),(200, 300))'
裁剪并導出。
指定geometry裁剪raster對象并導出為cog格式文件。
SELECT ST_ExportTo( ST_ClipToRast(rast, ST_GeomFromText('POLYGON((128.0 30.0,129.0 30.0,129.0 31.0,128.0 31.0,128.0 30.0))',4326),0), 'COG', 'OSS://<ak>:<ak_secret>@oss-cn.aliyuncs.com/mybucket/data/image_clip.tif' ); ------------- t (1 row)
刪除擴展(可選)。
DROP extension ganos_raster cascade;
SQL參考
詳細SQL手冊請參見Raster SQL參考。