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

使用Python实现多边形六边形填充的可用空间模块及函数问询

可用方案汇总

有多个成熟的Python空间工具链可以实现和PostGIS的ST_HexagonGrid一致的多边形区域六边形网格填充能力,以下是最常用的实现方案:

方案1:Uber H3 库(推荐)

H3是工业界应用最广的全球统一六边形格网库,搭配geopandas、shapely可以快速完成需求,生成效率高,格网支持全球唯一编码。
依赖安装命令:
pip install h3 geopandas shapely
示例代码:

import geopandas as gpd
import h3
from shapely.geometry import Polygon

# 读取待填充的多边形矢量,也可直接构造shapely Polygon对象
input_gdf = gpd.read_file("your_polygon.geojson")
input_poly = input_gdf.iloc[0].geometry
# 定义H3分辨率:数值越大六边形越小,0级边长约110km,10级约150m
resolution = 8

# 获取覆盖多边形的所有六边形索引
hex_ids = h3.polyfill(input_poly.__geo_interface__, resolution, geo_json_conformant=True)
# 将索引转为六边形矢量面
hex_polygons = [Polygon(h3.h3_to_geo_boundary(h, geo_json=True)) for h in hex_ids]
# 转为GeoDataFrame可直接导出或后续分析
hex_gdf = gpd.GeoDataFrame({"hex_id": hex_ids}, geometry=hex_polygons, crs=input_gdf.crs)

方案2:Tobler 库

Tobler是PySAL空间分析生态下的工具库,内置封装好的格网生成接口,代码更简洁。
依赖安装命令:
pip install tobler geopandas
示例代码:

import geopandas as gpd
from tobler.util import h3fy

input_gdf = gpd.read_file("your_polygon.geojson")
# 直接传入多边形GeoDataFrame和分辨率即可生成格网
hex_gdf = h3fy(input_gdf, resolution=8)

方案3:自定义边长实现(非固定分辨率)

如果需要自定义六边形边长、不使用H3的固定分辨率体系,可以用pyhexgrid库实现,参数可完全对齐PostGIS的ST_HexagonGrid输出。
依赖安装命令:
pip install pyhexgrid geopandas shapely
示例代码:

import geopandas as gpd
from pyhexgrid import HexGrid

input_gdf = gpd.read_file("your_polygon.geojson")
input_poly = input_gdf.iloc[0].geometry
# 定义六边形边长(单位和输入坐标系单位一致,如投影坐标系下可设为米),flat_top=True对应PostGIS默认的平顶点六边形
grid = HexGrid(side_length=1000, flat_top=True)
# 筛选和输入多边形相交的所有六边形
hex_polygons = grid.get_intersecting_polygons(input_poly)
hex_gdf = gpd.GeoDataFrame(geometry=hex_polygons, crs=input_gdf.crs)

补充说明

上述所有方案都支持调整参数匹配尖顶点/平顶点六边形、格网偏移、边长等需求,输出结果可与PostGIS的ST_HexagonGrid完全对齐。

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:07