Python栅格化Shapefile报错:Driver_Create参数3需为int类型
问题排查与解决方案
错误原因
触发TypeError: in method 'Driver_Create', argument 3 of type 'int'的核心原因:
x_res和y_res通过(xmax-xmin)/pixel_size计算得到的是浮点数,但GDAL的Driver.Create()方法要求第3、4个参数(栅格列数、行数)必须是整数类型。
修复步骤
1. 修正分辨率参数类型
将计算得到的分辨率强制转换为整数,可根据需求选择直接截断或四舍五入:
x_res = int((xmax - xmin) / pixel_size) # 转为整数列数 y_res = int((ymax - ymin) / pixel_size) # 转为整数行数
2. 修复路径转义问题
Python中反斜杠\会被解析为转义字符,需改为原始字符串或双反斜杠避免解析错误:
os.chdir(r'D:\DLM_adam_paper\forest_shp') # 原始字符串格式 output_taster_location = r'raster\veg02_f.tif'
3. 修正投影设置错误
EPSG:25832是投影坐标系,使用SetWellKnownGeogCS()会导致投影设置失败,改用更可靠的ImportFromEPSG()方法:
srse = osr.SpatialReference() srse.ImportFromEPSG(25832) # 直接通过EPSG编码导入投影 target_ds.SetProjection(srse.ExportToWkt())
4. 修复参数拼写错误
gdal.RasterizeLayer()中的参数option拼写错误,应为options:
gdal.RasterizeLayer(target_ds, [1], source_layer, None, None, [1], options=['ALL_TOUCHED=TRUE','ATTRIBUTE=VEG'])
完整修复代码
import os from osgeo import gdal, ogr, osr import geopandas as gpd # 修复路径转义问题 os.chdir(r'D:\DLM_adam_paper\forest_shp') input_shp = ogr.Open('veg02_f.shp') if not input_shp: raise Exception("无法打开shapefile文件") source_layer = input_shp.GetLayer() if not source_layer: raise Exception("无法获取图层") output_taster_location = r'raster\veg02_f.tif' pixel_size = 5 xmin, xmax, ymin, ymax = source_layer.GetExtent() # 修正分辨率为整数 x_res = int((xmax - xmin) / pixel_size) y_res = int((ymax - ymin) / pixel_size) # 创建栅格数据集 target_ds = gdal.GetDriverByName('GTiff').Create( output_taster_location, x_res, y_res, 1, gdal.GDT_Float32, ['COMPRESS=LZW'] ) target_ds.SetGeoTransform((xmin, pixel_size, 0.0, ymax, 0.0, -pixel_size)) # 修复投影设置 srse = osr.SpatialReference() srse.ImportFromEPSG(25832) target_ds.SetProjection(srse.ExportToWkt()) # 设置NoData并填充 band = target_ds.GetRasterBand(1) band.SetNodataValue(-9999) band.Fill(-9999) # 修复参数拼写错误 gdal.RasterizeLayer( target_ds, [1], source_layer, None, None, [1], options=['ALL_TOUCHED=TRUE', 'ATTRIBUTE=VEG'] ) # 释放资源 target_ds = None input_shp = None
内容的提问来源于stack exchange,提问作者user3713988
相关产品推荐
相关产品推荐

