From c90f0ade06adc989d3c96cbcf729d5c0f21ddec3 Mon Sep 17 00:00:00 2001 From: duxin Date: Wed, 16 Sep 2026 10:01:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Step=206=20?= =?UTF-8?q?=E5=85=89=E8=B0=B1=E6=8F=90=E5=8F=96=E7=9A=84=20GDAL=20API=20?= =?UTF-8?q?=E8=AF=AF=E7=94=A8=E4=B8=8E=E7=A9=BA=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit geo_to_pixel: gdal.InvGeoTransform 在 GDAL 2.x 起直接返回 6 元组逆矩阵、失败时返回 None,(success, inv_gt) 双元组写法是 GDAL 1.x API,执行到 Step 6 会抛 ValueError: too many values to unpack (expected 2)。改为 None 判定,与 src/utils/sampling.py 的既有写法统一。 get_spectral_in_coor: gdal.Open 失败返回 None 而非抛异常,原代码直接访问 dataset.RasterXSize,影像打不开时抛 'NoneType' object has no attribute 'RasterXSize' 掩盖真实原因,补 None 校验并给出明确报错。 --- src/core/glint_removal/get_spectral.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/core/glint_removal/get_spectral.py b/src/core/glint_removal/get_spectral.py index 5963b02..fa8e1ae 100644 --- a/src/core/glint_removal/get_spectral.py +++ b/src/core/glint_removal/get_spectral.py @@ -53,8 +53,11 @@ def geo_to_pixel(x_geo, y_geo, geotransform, dataset_srs=None): Returns: pixel_x, pixel_y: 像元坐标(int) """ - success, inv_gt = gdal.InvGeoTransform(geotransform) - if not success: + # ★ GDAL 2.x 起 InvGeoTransform 直接返回 6 元组逆变换矩阵,求逆失败时返回 None; + # 旧的 (success, inv_gt) 双元组写法属于 GDAL 1.x API,在 2.x 上会抛 + # "too many values to unpack (expected 2)"。与 src/utils/sampling.py 的写法保持一致。 + inv_gt = gdal.InvGeoTransform(geotransform) + if inv_gt is None: raise ValueError("无法对影像的仿射变换矩阵求逆,请检查影像地理元数据。") # 全仿射逆变换(含旋转项):px = inv_gt[0]+inv_gt[1]*x+inv_gt[2]*y,y 方向同理 @@ -603,6 +606,10 @@ def get_spectral_in_coor(imgpath, coorpath, outpath, radius=0, flare_path=None, # 打开影像数据集 dataset = gdal.Open(imgpath) + if dataset is None: + # ★ GDAL 打开失败返回 None(而非抛异常),不校验会在下一行 RasterXSize + # 处抛 'NoneType' object has no attribute 'RasterXSize',掩盖真实原因 + raise ValueError(f"无法打开影像文件,请检查路径与地理元数据: {imgpath}") im_width = dataset.RasterXSize # 栅格矩阵的列数 im_height = dataset.RasterYSize # 栅格矩阵的行数 num_bands = dataset.RasterCount # 栅格矩阵的波段数