如何计算多边形的栅格统计信息?


14

如何计算矢量层每个多边形的栅格点(多波段)的总和,平均值等。有人告诉我这叫做“区域统计”。我先用QGIS尝试过。

有一种方法可以做到,但是那太慢了(将栅格转换为矢量,与第二个矢量层相交,计算几何形状,导出数字,使用电子表格或其他程序计算统计信息,重新导入结果,这对我来说永远都是350.000栅格点)。

还提示我使用saga-gis。它具有“区域统计信息”,但是这些统计信息基于栅格波段的类别,而不是矢量层的多边形。因此,要使用此功能,我必须将矢量层转换为栅格,然后计算统计信息。

这似乎是解决此问题的错误方法。由于属于多边形边界的相交点,因此无法解决属于2个或更多多边形的栅格点。我假设基于多边形的统计信息应该能够处理此问题,所以我还假设尚未找到正确的模块。

Saga-gis确实有很多模块。请让我知道哪个是适合此应用程序的。


我正在尝试Rudivonstaden的解决方案,当我输入最后两个命令时,会出现以下错误消息:>>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)追溯(最近一次调用):文件“ <输入>” ,<module>中的第1行,AttributeError:'module'对象没有属性'analysis'>>> zonalstats.calculateStatistics(None)追溯(最近一次调用为最后):文件“ <input>”,<module中的第1行> NameError:未定义名称“ zonalstats”我想知道命令是否正确,或者我使用的光栅文件格式是否正确?谢谢!
丹·沃尔夫

嗨,丹。Stackexchange的工作原理与论坛有所不同。目的是进行问答类型交互,而不是进行持续的讨论。如果原始问题的答案不能解决您需要了解的问题,则应在评论部分中要求进行澄清,或者考虑提出新问题。
杰·瓜纳里

谢谢您的评论,丹。我的答案缺少必要的导入语句,该语句现在应该已修复。
rudivonstaden

Answers:


22

我一直在努力做完全相同的事情,但是由于种种原因,我致力于使用QGIS。我尝试通过GRASS插件以及Sextante插件使用v.rast.stats。后一种方法失败了,因为它似乎将统计信息附加到一个临时矢量层,然后将其删除。GRASS插件可以工作,但是不能处理重叠的多边形。

经过一些挖掘(在听起来不错的ZonalStats插件的源代码中),我发现QGIS实际上在API中内置了区域统计方法,并且这些方法还具有Python绑定。所以只要你只是在寻找countsummean为您的多边形要素统计,Python的控制台(插件>的Python控制台)目前的统计数据附加到多边形属性表最简单的方法。

  1. 在目录中选择您的栅格图层,然后在控制台中键入以下内容(它将获取您的栅格图层的源文件名)

    >>> rasterfile = qgis.utils.iface.mapCanvas().currentLayer().source()

  2. 选择您的矢量层,然后在控制台中执行以下命令(它将获取矢量层本身)

    >>> vectorlayer = qgis.utils.iface.mapCanvas().currentLayer()

  3. 在控制台中执行以下三个命令(它们将矢量层和栅格文件传递给QGIS的内置区域统计计算器)

    >>> import qgis.analysis

    >>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)

    >>> zonalstats.calculateStatistics(None)

结果将作为多边形字段中的额外字段附加。

区域统计

请注意,如果您想在新字段上添加前缀(而不只是将它们作为总和,均值和计数),则可以将第3步中的第一个命令替换为以下内容(假设您想将“ zonal_”用作前缀:

>>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile,"zonal_")

1
+1 qgis.analysis.QgsZonalStatistics()
亚伦

QGIS中有Zonal Statistics插件,因此可能不需要自己执行提到的命令:docs.qgis.org/2.2/en/docs/user_manual/plugins/… 我想知道为什么没有可能计算最大值和最小值值。
matandked 2015年

我使用了您的技术,但是删除了一些多边形:(
niahoo

6

最终找到它:在Saga-GIS中打开类别-多边形和数据网格,然后对多边形进行形状->网格->网格值->网格统计



3

这个问题似乎已经解决了一段时间,但是由于我最近需要一些栅格数据,所以我还是要把汤匙加到汤里。

rudivonstaden描述的QGIS方法非常有用,谢谢。但是,就我而言,我还想知道多边形中栅格值的最小值和最大值以及std,而我在QGIS中找不到该功能。我发现,通过功能的解决方案isectpolyrstGME,这是解决问题的GIS功能with.This喜爱我的给我的只是我需要和相当迅速地以及统计资料。

PS。GME有点不幸(ArcGIS)。因此,即使程序本身免费提供给所有人,您仍需要ArcGIS才能运行它。但是,如果您确实拥有ArcGIS(任何级别的许可),建议您尝试一下。

编辑:

我得到了我想要的统计数据,但是后来我发现,在查看实际数字后,我匆忙得出结论。您可以得到统计信息,是的,但仅适用于栅格中的第一个波段。因此,如果您使用3波段光栅图像进行操作,则统计信息不完整。我应该在原始帖子中指出渠道数量。如果要处理多波段光栅图像,最好使用上面建议的stn之类的SAGA-GIS。


3
zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)
zonalstats.calculateStatistics(None)

默认情况下,仅计算计数,总和和均值(正如您Raster -> Zonal Statistics在QGIS Desktop中可以看到的那样,它可以执行更多操作)。

例如,如果您只想计算均值,则必须使用:

zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer, rasterfile, QgsZonalStatistics.Mean)
zonalstats.calculateStatistics(None)

有关所有选项,请参见API

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.