Я использую gdal.RasterizeLayer()
, чтобы преобразовать шейп-файл в GeoTiff, используя шаблон 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'
, а также добавить и удалить параметр «3D» для gdal.RasterizeLayer()
. Ничего не влияет на выходные значения записи.
Здесь вы можете увидеть входной шейп-файл и значения атрибутов: input .shp
И вывод с неправильными значениями здесь: выходной растр