GDAL의 RasterizeLayer를 사용하여 모양 파일을 래스터에 구우려고합니다. 특정 픽셀 크기가 주어지면 다른 모양 파일에서 관심 영역 래스터를 미리 만듭니다. 그런 다음이 AOI는 모든 후속 래스터 화 (동일한 수의 열 및 행, 동일한 투영 및 지오 변환)의 기반이됩니다.
그러나 동일한 픽셀 크기와 투영을 기반으로 도형을 자체 래스터로 구울 때 문제가 발생합니다. 아래 링크 (이미지를 게시 할 충분한 담당자가 없음)는 원래 모양 파일을 황갈색으로 표시하고 RasterizeLayer가 데이터를 구운 어두운 분홍색을 표시합니다. 밝은 분홍색은 어두운 분홍색 래스터 데이터에 대한 데이터 값이 아닙니다. 회색은 쉐이프 파일 레코딩이 완료된 AOI입니다.
shapefile 다각형의 범위를 감안할 때 하단 두 모서리와 표시되는 데이터 아래의 두 픽셀에 레코딩 값이 표시됩니다. 그러나 이것은 사실이 아닙니다.
다음은 이러한 코드를 생성하는 데 사용한 코드입니다. 모든 모양은 QGIS를 사용하여 만들어졌으며 모두 동일한 투영으로 만들어졌습니다. (표시 된 그림의 그리드는 내가 사용하고있는 픽셀 크기에 대한 아이디어를 제공하는 것입니다.)
from osgeo import ogr
from osgeo import gdal
aoi_uri = 'AOI_Raster.tif'
aoi_raster = gdal.Open(aoi_uri)
def new_raster_from_base(base, outputURI, format, nodata, datatype):
cols = base.RasterXSize
rows = base.RasterYSize
projection = base.GetProjection()
geotransform = base.GetGeoTransform()
bands = base.RasterCount
driver = gdal.GetDriverByName(format)
new_raster = driver.Create(str(outputURI), cols, rows, bands, datatype)
new_raster.SetProjection(projection)
new_raster.SetGeoTransform(geotransform)
for i in range(bands):
new_raster.GetRasterBand(i + 1).SetNoDataValue(nodata)
new_raster.GetRasterBand(i + 1).Fill(nodata)
return new_raster
shape_uri = 'activity_3.shp'
shape_datasource = ogr.Open(shape_uri)
shape_layer = shape_datasource.GetLayer()
raster_out = 'new_raster.tif'
raster_dataset = new_raster_from_base(aoi_raster, raster_out, 'GTiff',
-1, gdal.GDT_Int32)
band = raster_dataset.GetRasterBand(1)
nodata = band.GetNoDataValue()
band.Fill(nodata)
gdal.RasterizeLayer(raster_dataset, [1], shape_layer, burn_values=[1])
이것은 GDAL의 버그입니까, 아니면 RasterizeLayer가 지정된 픽셀 영역 내에 다각형의 존재 여부가 아닌 다른 것에 기초하여 데이터를 레코딩합니까?