From f996353b374e0e59fa45f7d1747db0c897da9b7d Mon Sep 17 00:00:00 2001 From: duxin Date: Wed, 8 Jul 2026 16:29:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=8B=E9=87=8C=E9=87=91=E7=9F=A9?= =?UTF-8?q?=E9=98=B5=E9=B2=81=E6=A3=92=E6=80=A7=20=E2=80=94=20=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E9=87=8D=E5=8F=A0=E7=82=B9=20+=20nugget=20=E9=98=B2?= =?UTF-8?q?=E5=A5=87=E5=BC=82=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: 4326 点仍崩溃回退 IDW,原因两个: 1. 采样点中存在空间完全重叠点 → 协方差矩阵行列式为 0 2. 坐标范围出现负数 (X=-793275) → 经/纬度传反,空间距离扭曲 修复: 1. read_csv_data: drop_duplicates(subset=['proj_x','proj_y']) 坐标 <0.01m 的重叠点只保留首个,防止矩阵奇异化 2. OrdinaryKriging (2处): nugget=1e-6 微小固有方差强制打破矩阵奇异性,病态矩阵仍可求逆 --- src/postprocessing/map.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/postprocessing/map.py b/src/postprocessing/map.py index dc9558c..1f8fa65 100644 --- a/src/postprocessing/map.py +++ b/src/postprocessing/map.py @@ -813,6 +813,7 @@ class ContentMapper: ok = OrdinaryKriging( local_pts[:, 0], local_pts[:, 1], local_vals, variogram_model='spherical', + nugget=1e-6, # 微小 nugget 打破矩阵奇异性,防止协方差矩阵求逆崩溃 verbose=False, enable_plotting=False, ) @@ -921,7 +922,15 @@ class ContentMapper: print(f"已加载不确定性数据列: {uncertainty_col}") print(f"不确定性值范围: {gdf['uncertainty'].min():.4f} - {gdf['uncertainty'].max():.4f}") - print(f"成功读取 {len(gdf)} 个数据点") + # 防御性去重:空间重叠点 (X,Y < 0.01m) 只保留首个,防止克里金矩阵奇异化 + initial_count = len(gdf) + gdf = gdf.drop_duplicates(subset=['proj_x', 'proj_y'], keep='first') + final_count = len(gdf) + if final_count < initial_count: + print(f" [数学防御] 成功检测并剔除了 {initial_count - final_count} 个空间完全重叠点," + f"防止克里金矩阵奇异化!") + + print(f"成功读取 {final_count} 个数据点") return gdf def read_boundary_shapefile(self, shp_file):