分区统计工具 (ArcGIS Spatial Analyst) 是否有任何开源替代方案?什么是最好的工具(我可以在脚本中使用)对光栅文件进行计数统计?
4 回答
您可以使用各种方法对 GRASS 进行此操作。哪一个最合适将取决于您的数据和所需的输出。请注意,您也可以使用 GRASS 工具箱或 Sextante 工具箱从 QGIS 中使用 GRASS。
假设您有:
- 矢量图,例如,具有在属性表
vector_zones
的列中定义的区域。myzones
- 要计算区域统计数据的栅格图层“值”
要使用 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 函数也适用于栅格图层。
v.to.rast input=vector_zones output=zones column=myzones
r.univar map=values zones=zones output=output.file fs=;
输出是带有区域统计信息的表格。
这不需要您将矢量图层转换为栅格层(这是在内部完成的)。该函数计算栅格地图中每个矢量类别(cat)的基本单变量统计数据。
v.rast.stats vector=vector_zones layer=1 raster=values column_prefix=val
结果上传到矢量地图属性表。
您可以在 R 中使用 raster 包
library(raster)
v <- raster('raster filename')
z <- raster('zones raster filename')
zv <- zonal(v, z, fun=mean)
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 运行良好,为我的问题提供了有效的解决方案。
如果我错了,请纠正我,RobertH,但我相信 zonal() 要求区域在某种意义上已经“栅格化”,而很多时候人们会想要落在多边形内的栅格单元的统计数据。sp 包中 R 中的各种覆盖方法(参见:?"overlay-methods")对此是必要的,但如果我错了,我会很高兴听到它。与使用 SpatialGridsDataFrames 相比,我更喜欢 raster 包,但我认为必须依靠 sp 类来混合多边形和网格数据。没关系,除了变得有问题,因为它缺乏栅格包的出色内存管理,这使得多边形点样式操作在 R 中很难在大型栅格上进行。
我也被引导相信,但没有尝试过,这可以在 GRASS 中和/或通过 QGIS 完成,QGIS 的下一个版本(1.7)具有某种内置的区域统计功能。