我有一个.shp文件,我想将其转换为GEOTIFF。我的形状文件由一个内部有许多多边形的大多边形组成。我使用以下代码,但输出TIF只包含大多边形。
from osgeo import ogr, gdal
import subprocess
InputVector = Shapefile
OutputImage = OutputfileName
gdalformat = 'GTiff'
datatype = gdal.GDT_Byte
burnVal = 1
Shapefile = ogr.Open(InputVector)
Shapefile_layer = Shapefile.GetLayer()
Output = gdal.GetDriverByName(gdalformat).Create(OutputImage, RasterXSize, RasterYSize, 1, datatype, options=['COMPRESS=DEFLATE'])
Output.SetProjection(Projection)
Output.SetGeoTransform(GeoTransform)
Band = Output.GetRasterBand(1)
Band.SetNoDataValue(0)
gdal.RasterizeLayer(Output, [1], Shapefile_layer, burn_values=[burnVal])
subprocess.call("gdaladdo --config COMPRESS_OVERVIEW DEFLATE "+OutputImage+" 2 4 8 16 32 64", shell=True)
我不确定我在这里做错了什么。
谢谢
我的第一个猜测是确保较大的多边形具有“孔”/ NoData,其中较小的多边形出现。我试着用ArcMap的擦除工具中的一个例子来更清楚。你想要你的大多边形是什么样的蓝色勾号(擦除功能明显覆盖),我认为你的大多边形当前看起来是一个红色勾号,这将导致你的光栅只包括大多边形。如果我完全错了,我道歉,然后我们会找到另一种解决方案。
如果是这种情况(您的大多边形类似于蓝色勾号),将所有多边形刻录为1也可能会造成混淆。您可以在shapefile中创建一个新字段(例如UID)并为其提供唯一的数字ID(它必须是数字)。您可以根据新字段进行栅格化,例如:
gdal.RasterizeLayer(Output, [1], Shapefile_layer, options = ['ATTRIBUTE=UID'])