fix: 局部 Kriging 网格范围使用缓冲区导致 10x 冗余计算卡死

问题: sub_grid_x/y 使用了缓冲区范围 (block+500m) 而非块范围,
  导致每个 500m 块的网格点从 ~457x460 膨胀到 ~1500x1500 (9x),
  50 个块合计需计算 1.12 亿次 kriging, 任务构建阶段就卡死。

修复: sub_grid_x/y 改为仅使用块自身范围,
  缓冲区仅用于筛选局部采样点。
  每个网格点只计算一次, 总计算量 = 实际网格点数 (10.5M)。
This commit is contained in:
duxin
2026-07-08 13:14:40 +08:00
parent bdac7873f4
commit 7fbc613ded

View File

@ -730,21 +730,21 @@ class ContentMapper:
by_min = y_min + iy * block_dy
by_max = y_min + (iy + 1) * block_dy
# 带缓冲区的搜索范围
search_xmin = bx_min - window_size
search_xmax = bx_max + window_size
search_ymin = by_min - window_size
search_ymax = by_max + window_size
# 缓冲区内的网格点索引
grid_mask_x = (grid_x >= search_xmin) & (grid_x <= search_xmax)
grid_mask_y = (grid_y >= search_ymin) & (grid_y <= search_ymax)
# 块自身的网格(不含缓冲,保证每个网格点只被计算一次)
grid_mask_x = (grid_x >= bx_min) & (grid_x <= bx_max)
grid_mask_y = (grid_y >= by_min) & (grid_y <= by_max)
if not np.any(grid_mask_x) or not np.any(grid_mask_y):
continue
sub_grid_x = grid_x[grid_mask_x]
sub_grid_y = grid_y[grid_mask_y]
# 带缓冲区的搜索范围(仅用于筛选采样点)
search_xmin = bx_min - window_size
search_xmax = bx_max + window_size
search_ymin = by_min - window_size
search_ymax = by_max + window_size
# 缓冲区内的采样点
point_mask = (
(points[:, 0] >= search_xmin) & (points[:, 0] <= search_xmax) &