postgis不同的柵格存儲方式和查詢的速度以及區域統計

很多應用都需要綜合處理柵格和矢量數據進行統計,如果兩者在同一個數據庫裏就很方便。
但是有些影像太大了,而且還經常得更新,所以我這次想用文件式的管理,只把索引入庫,一查postgis是支持這種的。

raster2pgsql -s 3857 -R -C -I -M -F "raster.tif" -t 50x50 public.tablename |psql -U postgres -d database

根據這個博客的說法,入庫的時候要使用下面的幾種參數,可以變快(大概)

  • -R代表使用outdb的存儲方式,不把柵格本身入庫
  • -C是使用約束,比如srid、像素尺寸等等。
  • -I是建立索引
  • -M是運行vacuum
  • -t是把柵格切片,分成多個記錄,大小不同速度也不同
  • 還有一個-l 是建立金字塔,QGIS顯示的時候可以構建很多級據說就能流暢瀏覽

相關的討論也可以在gis.stackexchange上也有不少,大多數說得都差不多,但是好像多數人都沒有覺得這樣的速度有多麼好,不過因爲我可能經常得操作源柵格進行科學計算,所以文件式存儲至少是方便了很多。。。
另外其實有一個需求,就是我有時想快速概覽一下存儲的柵格,官方有一個教程,這個教程,但是要用他們的插件,我倒是想在postgis裏面看
然後就是查詢統計的問題了,同樣博客和論壇上都說有兩種方法裁剪出需要的區域,可以用st_clip來切,可以用st_intersection來切。前者是把矢量變成柵格,之後疊加出需要的區域,後者是把柵格矢量化之後做裁剪。前者快但是不準,後者慢一些但是準確。
一個官方ppt
我在自己的電腦和服務器上胡亂測試了一下,神奇的是因爲兩者有不同版本的postgis插件和postgresql版本,有些sql語句就不能運行,或者結果就不一樣了。。。
這裏寫圖片描述
但是這裏有一點要注意,我試的時候切片切得過多,然後還加了constraints,在服務器上入庫的時候入了幾十張大影像,慢得簡直懷疑人生,我直接睡覺去了(那個玩意兒本來就超卡,並不知道爲什麼)
所以說要適當地調整一下參數

最後是統計的部分,網上給出了很多統計函數,比如ST_SummaryStatsAgg,但是不同的Postgis就不通用(老的得用ST_SummaryStatsAgg),甚至還說我有拓撲錯誤。(消除拓撲錯誤之後仍然這樣說)所以我最後也沒有用函數,用的暴力直接計算。。。

網上搜Postgis的zonal statistics還是有一些教程,github好像還有魔改Postgis插件的超簡單調用接口,這些就以後再說吧。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章