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

如何按指定系数拆分Bounding box为多区域并输出GeoJson格式

边界框网格拆分与GeoJSON输出实现

功能要求

  • 输入参数:
    • 四个边界坐标:Northlimit(北界纬度)、Southlimit(南界纬度)、Eastlimit(东界经度)、Westlimit(西界经度)
    • 拆分系数Factor:代表经、纬度方向各自的拆分份数,例如Factor=10时最终会生成10×10共100个网格子区域
  • 输出要求:所有子区域组成的标准GeoJSON格式数据

核心实现逻辑

  1. 计算单网格步长:分别用东西边界的经度差、南北边界的纬度差除以拆分系数Factor,得到每个网格的经度宽度和纬度高度
  2. 双重循环遍历生成所有网格:外层循环处理经度方向的网格序列,内层循环处理纬度方向的网格序列,逐个计算每个网格的四个边界值
  3. 组装为GeoJSON结构:每个网格对应一个Polygon类型的Feature,全部存入FeatureCollection中,最终输出完整的GeoJSON

可运行Python实现代码

import json

def split_bbox_to_geojson(Northlimit: float, Southlimit: float, Eastlimit: float, Westlimit: float, Factor: int) -> dict:
    # 计算单网格经纬度步长
    lon_step = (Eastlimit - Westlimit) / Factor
    lat_step = (Northlimit - Southlimit) / Factor
    # 初始化GeoJSON根结构
    geojson_result = {
        "type": "FeatureCollection",
        "features": []
    }
    # 遍历生成所有网格
    for lon_idx in range(Factor):
        grid_west = Westlimit + lon_idx * lon_step
        grid_east = grid_west + lon_step
        for lat_idx in range(Factor):
            grid_south = Southlimit + lat_idx * lat_step
            grid_north = grid_south + lat_step
            # 构造闭合多边形坐标,符合GeoJSON规范(坐标顺序为[经度, 纬度],首尾坐标一致)
            polygon_coords = [[
                [grid_west, grid_south],
                [grid_east, grid_south],
                [grid_east, grid_north],
                [grid_west, grid_north],
                [grid_west, grid_south]
            ]]
            # 将当前网格加入要素集合,附带网格索引属性便于后续查询
            geojson_result["features"].append({
                "type": "Feature",
                "properties": {
                    "grid_id": f"grid_{lon_idx}_{lat_idx}",
                    "min_lon": grid_west,
                    "max_lon": grid_east,
                    "min_lat": grid_south,
                    "max_lat": grid_north
                },
                "geometry": {
                    "type": "Polygon",
                    "coordinates": polygon_coords
                }
            })
    return geojson_result

# 示例调用,使用你提供的原始边界测试
if __name__ == "__main__":
    output_geojson = split_bbox_to_geojson(
        Northlimit=47.808380127,
        Southlimit=45.8179931641,
        Eastlimit=10.4920501709,
        Westlimit=5.9559111595,
        Factor=10
    )
    # 导出为本地GeoJSON文件
    with open("split_grid_result.geojson", "w", encoding="utf-8") as f:
        json.dump(output_geojson, f, ensure_ascii=False, indent=2)

注意事项

  • GeoJSON的坐标顺序默认是经度在前,纬度在后,不要和常规的lat/lon顺序搞反,否则生成的文件位置会出错
  • 如果需要跨国际日期变更线的边界拆分,需要额外处理经度的正负跳转逻辑,上述代码适用于普通的连续经纬度范围
  • 你提供的原始边界示例对应瑞士附近的区域,Factor=10拆分后每个网格的大小约为45km×22km,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:04