fix: 克里金矩阵鲁棒性 — 去重重叠点 + nugget 防奇异化
问题: 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
微小固有方差强制打破矩阵奇异性,病态矩阵仍可求逆
This commit is contained in:
@ -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):
|
||||
|
||||
Reference in New Issue
Block a user