如何在多边形内绘制间距为10的规则网格点?附GeoPandas示例
在多边形内生成规则网格点并筛选内部点
实现步骤
- 获取多边形边界:提取多边形的最小/最大x、y值,确定网格生成的覆盖范围
- 生成网格点坐标:用
numpy生成等间距的x、y序列,组合得到所有网格点的坐标对 - 转为地理数据格式:将坐标对转为
shapely.Point对象,构建GeoDataFrame - 筛选内部点:利用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
相关产品推荐
相关产品推荐

