PostgreSQLraster(柵格資料)st_value優化舉例
標籤
PostgreSQL , postgis , 柵格 , 波段 , st_value , raster , 優化 , st_intersects , gist 索引 , arcgis
背景
柵格資料是由點陣組成的影像化資料,點陣具備空間屬性(邊界)。點陣由畫素組成,所以每個畫素也具備空間屬性,同時每個畫素內填充數值,數值可以代表溫度、灰度、顏色系數、屬性、溼度等等。
每個柵格中可以有多個波段,每個波段可以代表一個圖層,多個波段可以組合疊加計算。
使用柵格資料,可以實現具備空間、業務屬性的資料分析,視覺化等。
例如熱力圖、綠化率圖、道路、溫度分佈等等。
arcgis柵格資料組織形式:
任何有效的柵格格式
畫素陣列
一個或多個波段
以檔案形式儲存在磁碟或地理資料庫中
70 多種支援的格式
可用作影像服務
可在許多地理處理和分析工具中用作資料來源
可在“影像分析”視窗中使用
由於柵格資料可大可小,當提取某個畫素的VALUE時,可能會有一定的效能問題。
使用st_value提取raster指定畫素VALUE
https://postgis.net/docs/RT_ST_Value.html
當柵格檔案非常大時,st_value可能要執行很長時間,雖然只提取一個畫素的值。(此效能與柵格檔案本身的資料組織,檢索方法有關。)
使用st_setvalue設定raster指定畫素value
http://postgis.net/docs/RT_ST_SetValue.html
柵格背景知識
可以從arcgis或postgis的手冊中,學習柵格的知識。
http://resources.arcgis.com/zh-cn/help/main/10.2/#/na/009t00000004000000/
http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#//009t00000007000000
優化方法
業務層優化
1、切割raster,將一個大的raster,切割為若干小的raster
2、邊界轉geometry, 建立邊界的表示式索引
3、判斷輸入的geometry point是否與被查詢raster相交(st_intersects),相交則求st_value,否則不計算st_value
資料庫核心層優化
4、當然,還有一種優化方法是對柵格檔案本身建立較好的資料模型,便於快速檢索。這種方法對業務透明
小結
優化思路:
1、降低計算量,使用切割的方法。
2、降低計算量或IO放大,使用表示式索引。
3、降低精度,對raster進行分層,類似這樣的思路
SELECT
ST_AsText(ST_Union(pixpolyg)) As shadow
FROM
(
SELECT ST_Translate(
ST_MakeEnvelope(
ST_UpperLeftX(rast),
ST_UpperLeftY(rast),
ST_UpperLeftX(rast) + ST_ScaleX(rast)*2,
ST_UpperLeftY(rast) + ST_ScaleY(rast)*2,
0
),
ST_ScaleX(rast)*x,
ST_ScaleY(rast)*y
) As pixpolyg,
ST_Value(rast, 2, x, y) As b2val
FROM
dummy_rast
CROSS JOIN
generate_series(1,1000,2) As x
CROSS JOIN
generate_series(1,1000,2) As y
WHERE rid = 2
AND x <= ST_Width(rast)
AND y <= ST_Height(rast)
) As foo
WHERE
ST_Intersects(
pixpolyg,
ST_GeomFromText(`POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))`,0)
)
AND b2val != 254;
參考
https://stackoverflow.com/questions/31799824/optimizing-st-intersects-in-postgresqlpostgis
http://postgis.17.x6.nabble.com/raster-loading-and-ST-Value-performance-td4999924.html
http://postgis.net/docs/RT_ST_SetValue.html
https://postgis.net/docs/RT_ST_Value.html
http://postgis.17.x6.nabble.com/ST-value-slow-td5010865.html
http://resources.arcgis.com/zh-cn/help/main/10.2/#/na/009t00000005000000/
http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#//009t00000007000000
http://postgis.net/docs/manual-2.4/RT_reference.html
《PostgreSQL multipolygon 空間索引查詢過濾精簡優化 – IO,CPU放大優化》
《PostgreSQL 空間切割(st_split, ST_Subdivide)功能擴充套件 – 空間物件網格化 (多邊形GiST優化)》
《PostgreSQL 空間st_contains,st_within空間包含搜尋優化 – 降IO和降CPU(bound box) (多邊形GiST優化)》
相關文章
- Python 柵格資料處理教程(二)Python
- Python 柵格資料處理教程(一)Python
- C# 程式碼效能優化舉例C#優化
- GeoServer釋出PostGIS資料庫中的柵格資料Server資料庫
- Python arcpy建立柵格、批次拼接柵格Python
- ENVI無縫鑲嵌、拼接柵格資料的方法
- 用Python計算柵格資料的真實面積Python
- bs --- 柵格系統
- 【優化求解】基於蟻群演算法柵格地圖路徑規劃matlab優化演算法地圖Matlab
- VuePress 部落格優化之新增資料統計功能Vue優化
- bootstrap解析-柵格系統boot
- AUTOCAD——永久關閉柵格
- 資料庫優化 - SQL優化資料庫優化SQL
- 初學 Bootstrap 柵格系統boot
- hive優化-資料傾斜優化Hive優化
- 將NC柵格表示時間維度的資料提取出來的方法
- VuePress 部落格之 SEO 優化(五)新增 JSON-LD 資料Vue優化JSON
- 【新特性速遞】表格列的貨幣柵格化顯示
- 資料庫優化資料庫優化
- 利用GDAL實現柵格影像差值計算及Geoserver自動釋出柵格影像Server
- Spark效能優化:優化資料結構Spark優化資料結構
- 資料庫優化之臨時表優化資料庫優化
- Python批次讀取HDF多波段柵格資料並繪製像元直方圖Python直方圖
- outline優化一例優化
- 資料庫優化SQL資料庫優化SQL
- MySQL資料庫優化MySql資料庫優化
- Redis 5種資料結構及其使用場景舉例--STRINGRedis資料結構
- KubeCon 2021|使用 eBPF 代替 iptables 優化服務網格資料面效能eBPF優化
- Bootstrap柵格佈局原始碼解讀boot原始碼
- Bootstrap柵格系統學習總結boot
- 超大影像柵格轉向量快速實現
- 輕量級超級簡單的element的layout柵格化佈局
- Python字串講解舉例—工資字串!Python字串
- 【資料庫】查詢優化之子連線優化資料庫優化
- JAVA反射舉例Java反射
- 死鎖-舉例
- Python GDAL讀取柵格資料並基於質量評估波段QA對指定資料加以篩選掩膜Python
- vueTable大資料展示優化Vue大資料優化
- 資料庫優化建議資料庫優化