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 # 栅格矩阵的波段数