区域统计QGIS

时间:2011-04-27 10:30:51

标签: open-source statistics raster qgis

Zonal Statistics工具(ArcGIS Spatial Analyst)是否有任何开源替代方案? 什么是最好的工具(我可以在脚本中使用)计数光栅文件的统计数据?

4 个答案:

答案 0 :(得分: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 :(得分:2)

您可以使用R

中的光栅包
library(raster)
v <- raster('raster filename')
z <- raster('zones raster filename')
zv <- zonal(v, z, fun=mean)

答案 2 :(得分:1)

如果我错了,请纠正我,RobertH,但我相信zonal()要求区域在某种意义上已经被“光栅化”,而很多时候人们会想要在多边形内的栅格单元的统计数据。 sp包中的R中的各种叠加方法(参见:?“overlay-methods”)对此是必要的,但如果我错了,我会很高兴听到它。我更喜欢使用SpatialGridsDataFrames的raster包,但我认为必须依靠sp类来混合多边形和网格化数据。哪个是好的,除了变得有问题,因为它缺乏光栅包的强大内存管理,这使得在大型栅格中R中的点多边形样式操作真的很难做到。

我也相信,但尚未尝试过,这可以在GRASS内部和/或通过QGIS完成,下一版本的QGIS(1.7)具有某种内置的区域统计功能。

答案 3 :(得分: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运作良好,为我的问题提供了有效的解决方案。