我一直在努力做完全相同的事情,但是由于种种原因,我致力于使用QGIS。我尝试通过GRASS插件以及Sextante插件使用v.rast.stats。后一种方法失败了,因为它似乎将统计信息附加到一个临时矢量层,然后将其删除。GRASS插件可以工作,但是不能处理重叠的多边形。
经过一些挖掘(在听起来不错的ZonalStats插件的源代码中),我发现QGIS实际上在API中内置了区域统计方法,并且这些方法还具有Python绑定。所以只要你只是在寻找count
,sum
并mean
为您的多边形要素统计,Python的控制台(插件>的Python控制台)目前的统计数据附加到多边形属性表最简单的方法。
在目录中选择您的栅格图层,然后在控制台中键入以下内容(它将获取您的栅格图层的源文件名)
>>> rasterfile = qgis.utils.iface.mapCanvas().currentLayer().source()
选择您的矢量层,然后在控制台中执行以下命令(它将获取矢量层本身)
>>> vectorlayer = qgis.utils.iface.mapCanvas().currentLayer()
在控制台中执行以下三个命令(它们将矢量层和栅格文件传递给QGIS的内置区域统计计算器)
>>> import qgis.analysis
>>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)
>>> zonalstats.calculateStatistics(None)
结果将作为多边形字段中的额外字段附加。
请注意,如果您想在新字段上添加前缀(而不只是将它们作为总和,均值和计数),则可以将第3步中的第一个命令替换为以下内容(假设您想将“ zonal_”用作前缀:
>>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile,"zonal_")