5

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

4

4 回答 4

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

结果上传到矢量地图属性表。

于 2012-10-21T09:30:10.503 回答
2

您可以在 R 中使用 raster 包

library(raster)
v <- raster('raster filename')
z <- raster('zones raster filename')
zv <- zonal(v, z, fun=mean)
于 2011-04-29T03:52:08.040 回答
1

Rasterstats 包是一个很好的开源工具,对我来说效果很好:http: //blog.perrygeo.net/2013/09/24/python-raster-stats/

我开始使用它作为解决方法,因为 arcpy 的 ZonalStatistics 方法产生了一个有问题的栅格,在尝试将栅格转换为数组时会导致奇怪的错误(https://gis.stackexchange.com/questions/110274/save-失败-on-raster-object-created-from-numpyarraytoraster)。Rasterstats 运行良好,为我的问题提供了有效的解决方案。

于 2015-04-02T20:58:17.323 回答
1

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

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

于 2011-06-08T05:02:39.667 回答