如何使用 GDAL 栅格化 (python API) 按属性指定燃烧值?

How to specify burn values by attribute using GDAL rasterize (python API)?

我正在使用 gdal.RasterizeLayer() 使用 GeoTiff 模板将 shapefile 转换为 GeoTiff,同时通过 ATTRIBUTE 刻录输出值。我想要输出的是一个 .tif,其中燃烧值对应于给定属性的值。我发现 gdal.RasterizeLayer() 正在燃烧成奇怪的值,这些值与我的属性字段中的值不对应。这是我目前拥有的:

    gdalformat = 'GTiff'
    datatype = gdal.GDT_Byte

    # Open Shapefile
    shapefile = ogr.Open(self.filename)
    shapefile_layer = shapefile.GetLayer()
    # Get projection info from reference image
    image = gdal.Open(ref_image, gdal.GA_ReadOnly)
    output = gdal.GetDriverByName(gdalformat).Create(output_tif, image.RasterXSize, image.RasterYSize, 1, datatype,
                                                     options=['COMPRESS=DEFLATE'])
    output.SetProjection(image.GetProjectionRef())
    output.SetGeoTransform(image.GetGeoTransform())

    # Write data to band 1
    band = output.GetRasterBand(1)
    band.SetNoDataValue(0)
    gdal.RasterizeLayer(output, [1], shapefile_layer, options=['ATTRIBUTE=FCode'])

    # Close datasets
    band = None
    output = None
    image = None
    shapefile = None

    # Build image overviews
    subprocess.call("gdaladdo --config COMPRESS_OVERVIEW DEFLATE " + output_tif + " 2 4 8 16 32 64", shell=True)

发生的情况是输出 .tif 为每个属性正确分配了不同的燃烧值,但该值与属性值不对应。例如,输入属性值 FCode=46006 变成燃烧值 182(并不清楚为什么!)。我尝试添加和删除 'COMPRESS=DEFLATE' 选项,并添加和删除 gdal.RasterizeLayer() 的“3D”选项。 None影响输出燃烧值。

您可以在此处查看输入的 shapefile 和属性值:input .shp

这里的输出值不正确:output raster

我通过将类型更改为 gdal.GDT_Int32 自己解决了这个问题。