2011-04-27 94 views
5

區域統計工具(ArcGIS Spatial Analyst)有任何開源替代方法嗎? 什麼是最好的工具(我可以在腳本中使用)光柵文件的宿計數統計?區域統計QGIS

回答

2

你可以使用光柵包中的R

library(raster) 
v <- raster('raster filename') 
z <- raster('zones raster filename') 
zv <- zonal(v, z, fun=mean) 
+1

請參閱R中的幫助(帶區)瞭解帶有示例數據的可運行示例 – Spacedman 2011-05-16 11:48:40

1

糾正我,如果我錯了,RobertH,但我相信緯向()需要將區域已經「光柵化」在一定意義上,而許多次數會需要落入多邊形內的柵格單元的統計數據。 sp包中的R中的各種覆蓋方法(請參閱:?「覆蓋方法」)對此很有必要,但如果我錯了,我很樂意聽到它。我比較喜歡使用SpatialGridsDataFrames的柵格包,但我認爲必須依靠sp類來混合多邊形和網格數據。這是可以的,除了變得有問題,因爲它缺乏對光柵包的大量內存管理,這使得在大型柵格上R中的點式多邊形風格的操作真的很難做到。

我也被引導認爲,但沒有嘗試過,這可以在GRASS和/或通過QGIS完成,下一版本的QGIS(1.7)具有某種內置的區域統計功能。

3

你可以用GRASS使用各種方法來做到這一點。哪一個最合適取決於您的數據和所需的輸出。請注意,您也可以使用GRASS工具箱或Sextante工具箱在QGIS中使用GRASS。

讓我們假設你有:

  • 矢量地圖,例如,vector_zones在屬性表中的列 定義myzones的區域。
  • 您要計算你的分區統計

r.statistics

要使用r.statistics光柵層「價值」,你首先需要將矢量地圖轉換爲柵格層,您可以使用v.to.rast來完成。接下來,使用r.statistics來計算區域統計。

v.to.rast input=vector_zones output=zones column=myzones 
r.statistics base=zones cover=values out=outputmap method=average 

這會給你所選擇的分區統計,這可能是平均值,模式,中位數,方差等(見上手冊頁鏈接)一個新層。

r.univar

的r.univar功能也適用於柵格圖層。

v.to.rast input=vector_zones output=zones column=myzones  
r.univar map=values zones=zones output=output.file fs=; 

輸出是一個帶有區域統計的表格。

v.rast.stats

這並不需要你矢量圖層轉換爲柵格層(這是內部完成的)。該函數根據柵格圖計算每矢量類別(cat)的基本單變量統計。

v.rast.stats vector=vector_zones layer=1 raster=values column_prefix=val 

結果上傳到矢量地圖屬性表。

1

的Rasterstats包是一個很好的開源工具,爲我工作得好: http://blog.perrygeo.net/2013/09/24/python-raster-stats/

我開始使用它作爲一個變通,因爲ArcPy中的ZonalStatistics方法生產問題光柵導致一個奇怪的錯誤時試圖將光柵轉換爲數組(https://gis.stackexchange.com/questions/110274/save-fails-on-raster-object-created-from-numpyarraytoraster)。 Rasterstats運作良好,爲我的問題提供了一個有效的解決方案。