PostGIS
切換深色/淺色/自動模式 - PostGIS 空間資料庫 切換深色/淺色/自動模式 - PostGIS 空間資料庫 切換深色/淺色/自動模式 - PostGIS 空間資料庫 返回首頁 - PostGIS 空間資料庫

取得光柵的相異畫素值和畫素值數量

PostGIS 光柵有很多功能,用來執行某項作業的方式可能超過 10 種,而且有些執行速度比其他方式慢很多。假設您有一個光柵,或者您有一個感興趣的光柵區域,例如高度光柵,您想要知道該區域內相異的畫素值。您可能會想使用光柵中的 ST_Value 函數,但其實還有效率更高的函數可以使用,即 ST_ValueCount 函數。

ST_ValueCount 函數是 PostGIS 2.0+ 可用的許多統計光柵函數之一。它是一個會傳回函數,針對每一列傳回兩個值:一個畫素值 (value) 和一個畫素計數 (count),表示光柵中具有該值的畫素。它還有允許您過濾特定畫素值的變形函數。

此提示是由 stackexchange 上的提問所啟發的:如何從 PostGIS 光柵萃取出所有相異的值?

範例

取得所有光柵磚塊的頻段 1 相異畫素值清單

指定頻段號碼是選配的,如果不指定,預設為 1。我喜歡指定它,因為我經常使用多頻段光柵。在此範例中,我只有一個稱為 dem 的數位高度資料表。

SELECT DISTINCT (pvc).value
 FROM (SELECT ST_ValueCount(dem.rast,1) As pvc
   FROM dem) As f
 ORDER BY (pvc).value;

現在,如果您使用的是 PostgreSQL 9.3+,那麼您可以透過使用 LATERAL 子句來讓它更簡短(因為在多數狀況下 LATERAL 關鍵字都是可選的,因此您可以跳過 LATERAL 並像這樣書寫)

SELECT DISTINCT (pvc).value
 FROM dem, ST_ValueCount(dem.rast,1) As pvc
 ORDER BY (pvc).value;

取得感興趣區域的第 1 個頻帶的像素值清單和總像素數

現在,如果您有一個很大的涵蓋範圍,那麼您很有可能只關心特定區域,而不是您擁有的 300 萬個磁磚。您可能還想知道該值僅出現在您感興趣的區域中多少次,因此您真的想要結合您的武器庫與 ST_ClipST_Intersects。我在這裡使用的是 9.3 LATERAL 簡寫法

SELECT  (pvc).value, SUM((pvc).count) As tot_pix
 FROM dem
  INNER JOIN
ST_GeomFromText('LINESTRING(-87.627 41.8819,
 -87.629 41.8830)'
 , 4326) As geom
  ON ST_Intersects(dem.rast, geom),
    ST_ValueCount(ST_Clip(dem.rast,geom),1) As pvc
  GROUP BY (pvc).value
 ORDER BY (pvc).value;