You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用数组表示复杂多边形?基于城市DEM多边形的数组构建需求

解决方案

1. 生成城市形状的掩码数组

利用matplotlib.path.Path可以快速判断网格点是否在多边形边界内,生成对应掩码:

首先导入依赖库:

import numpy as np
from matplotlib.path import Path

假设你已经有城市边界的多边形坐标列表city_boundary(格式为[(x1,y1), (x2,y2), ..., (xn,yn)]),以及原方形数组的尺寸参数I、J(对应原np.zeros(I+1, J+1)的维度):

# 生成覆盖整个方形区域的网格坐标点
x_grid, y_grid = np.meshgrid(np.arange(I+1), np.arange(J+1))
# 将网格点转换为N×2的坐标数组(每个元素是(x,y))
points = np.vstack([x_grid.ravel(), y_grid.ravel()]).T

# 创建多边形路径对象
city_path = Path(city_boundary)
# 判断每个网格点是否在城市边界内,生成布尔掩码后转为int类型(1表示内部,0表示外部)
mask = city_path.contains_points(points).reshape(J+1, I+1).astype(int)

2. 修改循环代码,仅在掩码为1的区域执行计算

直接在原有循环中加入掩码判断即可:

for j in range(1, J+1):
    for i in range(1, I):
        if mask[j, i] == 1:
            # 执行内部节点方程等计算逻辑
            # internal node equation etc etc#

3. 可选:用向量化操作替代循环(提升效率)

如果你的计算逻辑支持向量化,可以直接跳过循环,对掩码为1的区域批量计算,效率更高:

# 示例:初始化结果数组
result = np.zeros_like(mask)
# 仅在城市内部区域执行计算
result[mask == 1] = 你的计算表达式  # 例如基于x_grid[mask==1]、y_grid[mask==1]的运算

注意:确保city_boundary的坐标顺序是闭合多边形(首尾坐标建议一致),且网格坐标的x/y顺序和边界坐标的x/y对应一致,避免出现错位。

内容的提问来源于stack exchange,提问作者DJalil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:15:27