Как указать значения записи по атрибуту, используя растеризацию GDAL (python API)? - PullRequest
0 голосов
/ 10 марта 2020

Я использую 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

И вывод с неправильными значениями здесь: выходной растр

1 Ответ

0 голосов
/ 10 марта 2020

Я сам исправил это, изменив тип на gdal.GDT_Int32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...