diff --git a/src/postprocessing/map.py b/src/postprocessing/map.py index 0681b2e..a939555 100644 --- a/src/postprocessing/map.py +++ b/src/postprocessing/map.py @@ -815,35 +815,6 @@ class ContentMapper: ) return np.array(z), bx_min, bx_max, by_min, by_max - -def _local_krige_block_worker(args): - """单个局部克里金块任务(独立进程入口,必须为模块级函数)""" - (local_pts, local_vals, sub_grid_x, sub_grid_y, - bx_min, bx_max, by_min, by_max, - grid_dx, grid_dy, block_ix, block_iy, total) = args - - import numpy as np - from pykrige.ok import OrdinaryKriging - - if len(local_pts) < 3: - return (None, bx_min, bx_max, by_min, by_max) - - print(f" [LocalKrige] 块 ({block_iy},{block_ix}) [{block_iy * 100 + block_ix}/{total}] " - f"采样点={len(local_pts)}, 网格={len(sub_grid_x)}×{len(sub_grid_y)}") - - ok = OrdinaryKriging( - local_pts[:, 0], local_pts[:, 1], local_vals, - variogram_model='spherical', - verbose=False, - enable_plotting=False, - ) - z, ss = ok.execute( - 'grid', sub_grid_x, sub_grid_y, - backend='loop', - n_closest_points=min(15, len(local_pts)), - ) - return (np.array(z), bx_min, bx_max, by_min, by_max) - @staticmethod def _idw_interpolation(points, values, grid_xx, grid_yy, power=2, n_neighbors=15): @@ -3304,3 +3275,36 @@ if __name__ == "__main__": # resolution=50 # ) # """) + + +# ═══════════════════════════════════════════════════════════════ +# 模块级函数:多进程 worker(必须在类外部定义,供 Pool.map 使用) +# ═══════════════════════════════════════════════════════════════ + +def _local_krige_block_worker(args): + """单个局部克里金块任务(独立进程入口,必须为模块级函数)""" + (local_pts, local_vals, sub_grid_x, sub_grid_y, + bx_min, bx_max, by_min, by_max, + grid_dx, grid_dy, block_ix, block_iy, total) = args + + import numpy as np + from pykrige.ok import OrdinaryKriging + + if len(local_pts) < 3: + return (None, bx_min, bx_max, by_min, by_max) + + print(f" [LocalKrige] 块 ({block_iy},{block_ix}) [{block_iy * 100 + block_ix}/{total}] " + f"采样点={len(local_pts)}, 网格={len(sub_grid_x)}×{len(sub_grid_y)}") + + ok = OrdinaryKriging( + local_pts[:, 0], local_pts[:, 1], local_vals, + variogram_model='spherical', + verbose=False, + enable_plotting=False, + ) + z, ss = ok.execute( + 'grid', sub_grid_x, sub_grid_y, + backend='loop', + n_closest_points=min(15, len(local_pts)), + ) + return (np.array(z), bx_min, bx_max, by_min, by_max)