如何在Python中基于多边形对光栅文件进行区域统计?

时间:2013-03-12 21:19:23

标签: python statistics raster gdal

我有一个光栅文件和一个多边形shapefile。我喜欢得到多边形覆盖区域的光栅文件的平均值。我喜欢在python独立脚本中执行此操作。所以QGIS和Starspan不起作用。 Arcpy也不可用。我喜欢使用GDAL。什么Python包?你可以推荐一些方法吗?

1 个答案:

答案 0 :(得分:2)

有一个gdal.RasterizeLayer函数可以让你光栅化矢量图层。它有一些缺点,您需要有一个栅格化的输出数据集。此外,如果您有重叠的几何图形,则需要首先在单独的矢量图层上隔离每个几何图形,这意味着您必须遍历所有几何图形。

使用gdal,您可以使用MEM驱动程序创建内存中的文件,这使它更容易一些,但仍然有很多数据集创建开销。

对于每个几何体,步骤或多或少都会像:

driver = gdal.GetDriverByName('MEM')
outds = driver.Create('', pixelxsize, pixelysize, 1, GDT_Byte)
outds.SetProjection(target_proj)
outds.SetGeoTransform(target_gt)

gdal.RasterizeLayer(outds, [1], vectorlayer, burn_values=[1])

现在outds包含几何体的蒙版,使用它与例如np.masked_where,你可以隔离几何体内的像素。

它不是那么方便,但是一旦你有一个多边形的蒙面数组,它很容易通过使用numpy / scipy得到统计数据。

编辑: 有关更详细的示例,请参阅此脚本: http://svn.osgeo.org/gdal/trunk/autotest/alg/rasterize.py