修复多步运行时参数传递及文件读取问题
This commit is contained in:
@ -14,17 +14,67 @@ def rasterize_envi_xml(shp_filepath):
|
||||
|
||||
@timeit
|
||||
def rasterize_shp(shp_filepath, raster_fn_out, img_path, NoData_value=None):
|
||||
# ---------- 防御性处理:路径标准化 ----------
|
||||
shp_filepath = os.path.abspath(shp_filepath).replace('\\', '/')
|
||||
print(f"[DEBUG rasterize_shp] 标准化后的 SHP 路径: {shp_filepath}")
|
||||
|
||||
# 检查伴随文件完整性
|
||||
shp_base = os.path.splitext(shp_filepath)[0]
|
||||
for ext in ['.dbf', '.shx', '.prj']:
|
||||
companion = shp_base + ext
|
||||
if os.path.exists(companion):
|
||||
print(f"[DEBUG rasterize_shp] 伴随文件存在: {companion}")
|
||||
else:
|
||||
print(f"[WARNING rasterize_shp] 伴随文件缺失: {companion}")
|
||||
|
||||
# 确保 GDAL/OGR 驱动已注册
|
||||
gdal.AllRegister()
|
||||
ogr.RegisterAll()
|
||||
|
||||
# 检查 ESRI Shapefile 驱动
|
||||
driver = ogr.GetDriverByName("ESRI Shapefile")
|
||||
if driver is None:
|
||||
raise RuntimeError(
|
||||
"系统中未找到 ESRI Shapefile 驱动!请检查 GDAL 是否正确安装及是否包含 Shapefile 支持。"
|
||||
)
|
||||
print(f"[DEBUG rasterize_shp] ESRI Shapefile 驱动: {driver.GetName()}")
|
||||
|
||||
# 打开参考影像获取尺寸信息
|
||||
dataset = gdal.Open(img_path)
|
||||
if dataset is None:
|
||||
raise ValueError(f"无法打开参考影像文件: {img_path}")
|
||||
im_width = dataset.RasterXSize
|
||||
im_height = dataset.RasterYSize
|
||||
geotransform = dataset.GetGeoTransform()
|
||||
imgdata_in = dataset.GetRasterBand(1).ReadAsArray()
|
||||
del dataset
|
||||
|
||||
# Open the data source and read in the extent
|
||||
# ---------- 打开 SHP 文件(双重尝试获取详细错误) ----------
|
||||
source_ds = gdal.OpenEx(shp_filepath, gdal.OF_VECTOR)
|
||||
if source_ds is None:
|
||||
raise ValueError(f"无法打开shapefile: {shp_filepath}")
|
||||
# gdal.OpenEx 失败,尝试 ogr.Open 获取更详细的错误信息
|
||||
try:
|
||||
ogr_ds = ogr.Open(shp_filepath)
|
||||
except Exception as ogr_err:
|
||||
raise RuntimeError(
|
||||
f"GDAL/OGR 无法打开 SHP 文件(详细原因):\n"
|
||||
f" ogr.Open 抛出异常: {str(ogr_err)}\n"
|
||||
f" 文件路径: {shp_filepath}\n"
|
||||
f"常见原因:\n"
|
||||
f" 1. 路径包含中文/空格/特殊字符(建议复制到纯英文路径下重试)\n"
|
||||
f" 2. .dbf 或 .shx 伴随文件缺失或损坏\n"
|
||||
f" 3. GDAL 未注册 ESRI Shapefile 驱动\n"
|
||||
f" 4. 文件被其他程序锁定"
|
||||
)
|
||||
if ogr_ds is None:
|
||||
raise RuntimeError(
|
||||
f"ogr.Open 和 gdal.OpenEx 均返回 None,无法打开 SHP 文件。\n"
|
||||
f"文件路径: {shp_filepath}\n"
|
||||
f"请检查:\n"
|
||||
f" 1. 所有伴随文件(.dbf/.shx/.prg)是否齐全\n"
|
||||
f" 2. 文件是否被其他程序占用\n"
|
||||
f" 3. 路径中是否存在不支持的字符"
|
||||
)
|
||||
|
||||
# 检查图层数量,如果有多层,指定使用第一层
|
||||
layer_count = source_ds.GetLayerCount()
|
||||
|
||||
Reference in New Issue
Block a user