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):