嗨,在先前的部落格中,我們討論如何使用 h3 索引和 postgresql 對單波段柵格進行柵格分析。在本部落格中,我們將討論如何處理多波段柵格並輕鬆建立索引。我們將使用 Sentinel-2 影像並從處理後的 h3 細胞創建 NDVI 並視覺化結果
我們正在從尼泊爾博卡拉地區的https://apps.sentinel-hub.com/eo-browser/下載sentinel 2數據,只是為了確保湖泊在圖像網格中,以便我們可以輕鬆地驗證 NDVI 結果
要下載所有樂團的哨兵圖片:
您也可以下載預先產生的指數,例如 NDVI、僅假色 tiff 或最適合您需求的特定波段。我們正在下載所有樂隊,因為我們想自己進行處理
當我們下載原始格式時,我們將所有樂隊作為與哨兵分開的 tiff
這可以透過GIS工具或gdal來完成
我們需要將下載的檔案重新命名為 band1,band2 以避免檔案名稱中出現斜線
本次練習最多處理頻段 9,您可以依需求選擇頻段
我正在使用 cog2h3 repo 中提供的 bash 腳本來自動化這些
現在,我們終於完成了預處理腳本,讓我們繼續計算複合齒輪影像中每個波段的 h3 單元格
我們對此哨兵圖像使用分辨率 10,但是您也會在腳本本身中看到,它將列印柵格的最佳分辨率,使 h3 單元小於柵格中的最小像素。
我們花了一分鐘來計算結果並將結果儲存在 postgresql 中
日誌:
現在我們的資料在 postgresql 中,讓我們做一些分析
查詢計畫:
QUERY PLAN | -----------------------------------------------------------------------------------------------------------------+ Seq Scan on sentinel (cost=0.00..28475.41 rows=923509 width=16) (actual time=0.014..155.049 rows=923509 loops=1)| Planning Time: 0.080 ms | Execution Time: 183.764 ms |
As you can see here for all the rows in that area the calculation is instant . This is true for all other indices and you can compute complex indices join with other tables using the h3_ix primary key and derive meaningful result out of it without worrying as postgresql is capable of handling complex queries and table join.
Lets visualize and verify if the computed indices are true
create table ndvi_sentinel as( select h3_ix , (band8-band4)/(band8+band4) as ndvi from public.sentinel )
ALTER TABLE ndvi_sentinel ADD COLUMN geometry geometry(Polygon, 4326) GENERATED ALWAYS AS (h3_cell_to_boundary_geometry(h3_ix)) STORED;
create index on ndvi_sentinel(geometry);
As we know value between -1.0 to 0.1 should represent Deep water or dense clouds
lets see if thats true ( making first category as transparent to see the underlying image )
As there were clouds around the lake hence nearby fields are covered by cloud which makes sense
Thank you for reading ! See you in next blog
以上是處理多波段柵格(Sentinel-使用 hndex 並建立索引的詳細內容。更多資訊請關注PHP中文網其他相關文章!