You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:31:03