使用Python将Shapefile转换为Geotiff

时间:2019-03-04 22:05:27

标签: python gdal osgeo

我有一个.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)

我不确定我在做什么错。

谢谢

1 个答案:

答案 0 :(得分:0)

我的第一个猜测是确保较大的多边形在较小的多边形出现的地方具有“洞” / NoData。我会尝试使用ArcMap的擦除工具中的示例来使其更加清晰。您想要的大多边形是蓝色的勾号(明显具有擦除功能),我认为您当前的大多边形是红色的勾号,这将导致您的栅格仅包含大多边形。如果我完全错了,我深表歉意,那么我们将找到另一个解决方案。

enter image description here

如果是这种情况(您的大多边形类似于蓝色的勾号),则将所有多边形刻录为1也会造成混乱。您可以在shapefile中创建一个新字段(例如UID),并为其赋予唯一的数字ID(必须为数字)。您可以根据新字段进行栅格化,例如:

gdal.RasterizeLayer(Output, [1], Shapefile_layer, options = ['ATTRIBUTE=UID'])