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

如何在多边形内绘制间距为10的规则网格点?附GeoPandas示例

在多边形内生成规则网格点并筛选内部点

实现步骤

  1. 获取多边形边界:提取多边形的最小/最大x、y值,确定网格生成的覆盖范围
  2. 生成网格点坐标:用numpy生成等间距的x、y序列,组合得到所有网格点的坐标对
  3. 转为地理数据格式:将坐标对转为shapely.Point对象,构建GeoDataFrame
  4. 筛选内部点:利用GeoPandas的空间判断方法,筛选出位于多边形内部的点

完整代码

import geopandas as gpd
import numpy as np
from shapely.geometry import Polygon, Point

# 定义示例多边形
x = [0, 100, 150, 100, 50]
y = [0, 115, 200, 250, 50]
polygon_geom = Polygon(zip(x, y))
crs = 'epsg:27700'
polygon = gpd.GeoDataFrame(index=[0], crs=crs, geometry=[polygon_geom])

# 1. 获取多边形的边界范围
min_x, min_y, max_x, max_y = polygon_geom.bounds

# 2. 生成间距为10的网格点坐标
# 生成x轴序列:从min_x到max_x,步长10(用floor/ceil确保覆盖完整范围)
x_coords = np.arange(np.floor(min_x), np.ceil(max_x) + 10, 10)
# 生成y轴序列:从min_y到max_y,步长10
y_coords = np.arange(np.floor(min_y), np.ceil(max_y) + 10, 10)

# 组合所有网格点的坐标对
grid_points = [Point(x_val, y_val) for x_val in x_coords for y_val in y_coords]

# 3. 转为GeoDataFrame
grid_gdf = gpd.GeoDataFrame(geometry=grid_points, crs=crs)

# 4. 筛选位于多边形内部的点
# contains判断点在多边形内部(不含边界),若要包含边界可改用within/intersects
inside_points = grid_gdf[grid_gdf.geometry.apply(lambda p: polygon_geom.contains(p))]

# 输出结果统计
print(f"总网格点数:{len(grid_gdf)}")
print(f"多边形内部网格点数:{len(inside_points)}")

关键说明

  • 用np.floor和np.ceil处理边界值,确保网格完全覆盖多边形范围,避免边缘点遗漏
  • contains方法严格判断点在多边形内部(不包含边界),如果需要保留边界上的点,可替换为polygon_geom.within(p)或polygon_geom.intersects(p)
  • 所有地理数据需保持相同CRS(示例中为epsg:27700),避免坐标偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:50:32