从Python控制台使用QGIS Zonal Stats插件吗?


9

我正在使用QGIS中的Zonal Stats插件从重叠的多边形中提取栅格统计信息(我具有物种分布的shapefile,并且我希望从每个物种的范围内提取环境数据)。我有300个左右的文件需要从中获取数据,因此想编写一个脚本在python控制台中运行,但是我是python的新手,不知道如何执行此操作。



乍得-是的,这是一个类似的问题,但更具体。没有人回答另一个问题,相反,他们提出了解决问题的其他方法。我不知道如何删除其他帖子
Thomas

在另一个问题中,我指出了能够满足您需求的R脚本,Sylvester Sneekly为您命名了python中的确切方法。如果您不习惯使用python或r编写代码,那么所有其他提示都将无济于事。您需要一个自编码脚本或许多鼠标单击。如果不起作用,请学习一些编码,尝试使用示例并进行报告。
Curlew

@Curlew-Sylvester的方法听起来不错,但对我来说却代表着巨大的学习曲线,目前我没有时间这样做。我感谢西尔维斯特(Sylvester)的帮助,但这并不是我所追求的直接答案。虽然我拥有我在其他问题(gis.stackexchange.com/questions/23203/…)中提到的帖子中的大部分代码。如果Sylvester的方法是在python中执行此操作的唯一方法,也许我低估了它的难度。
Thomas

@Curlew-您的R脚本确实有效,谢谢。我唯一尚未解决的事情是如何将R中返回的结果附加到我的shapefile的.dbf文件中(对此将提供任何帮助)。
Thomas

Answers:


13

下面的代码为我工作QGis 1.8.0

您可以修改它以容纳带有循环的多个文件。

from qgis.analysis import QgsZonalStatistics

#specify polygon shapefile vector
polygonLayer = QgsVectorLayer('F:/temp/zonalstat/zonePoly.shp', 'zonepolygons', "ogr") 

# specify raster filename
rasterFilePath = 'F:/temp/zonalstat/raster1.tif'

# usage - QgsZonalStatistics (QgsVectorLayer *polygonLayer, const QString &rasterFile, const QString &attributePrefix="", int rasterBand=1)
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

大。非常感谢vinayan,这正是我的追求。
托马斯

另请参见此处,了解使用R的替代解决方案
Thomas

很高兴它对您有所帮助!
vinayan

@vinayan QProgressDialog对于希望查看计算进度的可视环境非常有用。在命令行中没有用。您可以将其None用作参数,并且可以正常工作。然后,您不需要从PyQt4..行或progressDialog = 行。参见gis.stackexchange.com/questions/23203/…的
rudivonstaden 2013年

@rudivonstaden-现在有意义。.i更新了答案
vinayan

2

这是在SAGA GIS中获得所需内容的方法。这可能不是您想要的解决方案,但是可以。我将研究插件失败的原因,并尽快对其进行更新。

安装SAGA GIS(也应通过Linux发行版中的apt-get或aptitudbe获得)。

  • 启动SAGA,加载栅格和矢量形状(菜单模块->文件-> GDAL / OGR导入)。您可以查看以下过程。
  • 执行模块“多边形的网格统计信息”(菜单模块->形状->网格->网格值)。值直接添加到表中。对话框应如下所示在此处输入图片说明
  • 转到工作区中的“数据”选项卡,右键单击矢量层,然后选择“ 另存为 ”以导出具有添加属性的形状。您也可以通过右键单击显示属性表,然后单击表显示

这适用于您发送给我的数据集。也可以通过SEXTANTE作为BATCH流程在QGIS中调用SAGA模块。为此,只需在SEXTANTE选项中激活SAGA模块即可。


感谢您的建议,但我已经尝试过传奇-它产生的结果不一致,即两次执行相同的操作会得到不同的结果。我知道QGIS中的ZonalStats插件可以工作,因此我正在寻找一种自动化ZonalStats的方法。
Thomas

@vinayan我有u给定的区域统计信息代码,但它在多边形矢量层中创建列,但不更新计算值。为什么会这样呢?
user99 2015年

2
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

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

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

zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1, QgsZonalStatistics.Mean)
zoneStat.calculateStatistics(None)

有关所有选项,请参见API


谁能同时提供两种选择的统计数据(例如最小和最大)的语法帮助?我一直在尝试不同的方法,但没有成功
dorakiara

在Qgis 3中,您需要用光栅文件本身替换光栅文件路径!因此,rasterFilePath ='F:/temp/zonalstat/raster1.tif'变为:rasterFile = QgsRasterLayer('F:/temp/zonalstat/raster1.tif','raster')然后,将rasterFilePath更改为zoneStat中的rasterFile命令zoneStat = QgsZonalStatistics(polygonLayer,rasterFile,'pre-',1)zoneStat.calculateStatistics(None)
philsch
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.