本文介紹了柵格模型的用途、基本構成和快速入門等內容。
模型用途
簡介
柵格模型由按行和列(或格網)組織的像元(或像素)矩陣組成,其中的每個像元都包含一個資訊值(例如溫度),柵格模型承載了數字航空像片、衛星影像、數字圖片、掃描地圖等柵格資料的儲存與計算。
GanosBase Raster是對象關係型資料庫PostgreSQL相容版本(PolarDB PostgreSQL版)的一個時空引擎擴充,使上述資料庫能夠有效快速儲存管理柵格類型資料,同時支援多源柵格資料(如遙感、攝影測量和專題地圖)之間的融合與分析,並提供了GeoServer外掛程式協助使用者將庫內柵格對象發布為OGC標準的服務(如WMS或WMTS等)。GanosBase Raster可用於包括氣象、環境監測、地質勘探、自然資源管理、國防、應急響應、電信、傳媒、交通、城市規劃以及國土安全等領域。
功能概述
GanosBase Raster相容多種外部格式的直接輸入,例如,Tiff、IMG、HDF、NetCDF、GRIB等,已入庫的Raster對象同樣也可以匯出為前面介紹的多種外部格式。
柵格資料入庫後,使用者可以查詢柵格對象的基本屬性資訊、波段統計資訊、像素值統計資訊並通過多種方式擷取像素矩陣。
使用者也可以對Raster對象進行多種操作,例如投影轉換、裁剪、波段運算、鑲嵌,勻色等。
Raster提供了動態瓦片能力用於柵格對象的快速可視化。
主要業務情境
在實際應用中,Raster可以用於柵格資料存放區和分析的各類情境:
智慧農業
GanosBase Raster支援海量遙感衛星資料的高效儲存與查詢。通過對多種來源的空間專題資料與遙感影像資料的聯集查詢、波段計算與空間統計等操作,解決各種農業生產資料分析相關的問題,並對接DataV提供豐富多樣的地圖、統計圖表對資料進行可視化展示,從而指導各類農業生產活動高效運行。

氣象水文預測
GanosBase Raster支援HDF、NetCDF、Grib等常用的氣象水文領域標準資料格式的入庫與快速查詢,同時提供了空間插值、等值線/等值面提取等功能,可快速擷取氣象水文業務中的關鍵商務資訊,為防災提供關鍵支援人員。
金融保險服務
基於GanosBase Raster提供的衛星遙感影像波段計算與分類相關技術,使用者可以在不同時間空間條件下快速對作物類型、面積和長勢進行統計分析,並結合農戶對耕地的自證、政府機構登記的土地流轉資料,以及氣候、地理位置、行業景氣度等情況,利用行業內專業的風控模型預估產量和產值,從而為農戶提供信貸額度和合理的還款周期。
基本構成
Raster模型概述
資料模型主要包括以下幾個元素構成:
Raster:泛指一份柵格資料。例如,一個景遙感影像、一個TIFF檔案等。
Tile:資料分塊,為一系列像素的集合。Tile為Raster對象在資料庫中儲存的基本單元,一般每個Tile包含256x256個像素值。
Band:由多個Tile構成的2D柵格資料圖層,每個Tile擁有一個行列號。
Cell:表示Tile中的一個像素,可以擁有不同的資料類型。例如Byte,Short,Int,Double等。
Pyramid:通過逐級抽稀的柵格金字塔,方便快速顯示。每個Pyramid包含不同的層級,每個層級對應一個Layer,第0層代表未經處理資料。
Metadata:柵格的儲存中繼資料,包括:空間範圍、投影類型、像素類型等。

如上圖所示,GanosBase 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對象關聯到地球表面上某個具體位置。
GanosBase使用一個整數來表示SRS的定義引用,稱為SRID。Raster對象通過其自身的SRID值與SRS關聯。
更多內容請參見空間參考。
資料列視圖
在GanosBase中,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;索引
空間索引使GanosBase處理大型空間資料集時避免對資料庫進行全域“順序掃描”。索引通過將資料群組織到搜尋樹中來加速搜尋,可以快速遍曆該搜尋樹以尋找特定記錄。
GanosBase為柵格資料提供了兩種索引方式:
索引名稱 | 索引說明 | 索引特點 |
Btree | Btree索引一般可作用於柵格檔案名稱,通過對柵格檔案名稱比對進行尋找。 | Btree是資料庫最通用的索引方法,可以加速的查詢類型也最多。 |
GIN(Generalized Inverted Index) | 即通用倒排索引,通過這種索引結構可以快速的尋找到包含指定關鍵字的元組,因此GIN索引特別適用於支援全文檢索搜尋,使用者可以對Raster欄位類型建立此類索引。 | GIN索引對待用資料是最好的,因為尋找速度很快,但索引更新比GiST索引速度慢。 |
GanosBase Raster的優勢
相較於開源空間資料庫PostGIS內建的Raster外掛程式,GanosBase Raster在業務適配、儲存成本、計算能力方面都有明顯的優勢,主要體現在以下幾方面:
GanosBase Raster儲存結構更加貼近業務需求
與PostGIS Raster完全柵格化的儲存方式不同,GanosBase Raster提供了物件導向的儲存結構,一幅柵格資料(影像,映像、DEM等)匯入後直接對應GanosBase Raster的一行記錄,對使用者而言形成了一對一的關係,清晰明了,單個對象的容量沒有限制,一行記錄可以儲存大到1TB以上的超大影像/柵格。GanosBase Raster屏蔽了直接對Tile進行操作的方式,可完整記錄柵格對象的中繼資料資訊,並且與時序高度關聯,可以與業務進行更好的銜接。
GanosBase Raster支援資料降本儲存
由於獨特的結構設計,針對海量影像分析這類儲存成本較大的情境,GanosBase Raster支援將柵格中繼資料存放區在庫內,柵格屬性資料存放區在更為廉價的Object Storage Service上。這種情況下依然支援對柵格進行各類空間分析操作,同時可大幅度降低儲存成本。
GanosBase Raster擁有更多時空運算元
除了支援傳統的柵格空間關係判斷、柵格金字塔、柵格像素值、柵格屬性、柵格影像處理等操作外,GanosBase Raster還支援多種獨特的柵格統計、柵格代數操作,同時支援專業的映像勻色演算法和海量柵格概視圖實現渲染加速。
快速入門
簡介
快速入門協助使用者快速理解GanosBase 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訪問網域名稱使用規則 進行訪問。具體請參見Object Storage Service服務路徑。
<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參考。