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

Python拆分GeoJSON嵌套坐标数组生成独立FeatureCollection实现方法

需求说明

你现有程序可生成如下结构的类GeoJSON文件:

{
  "type": "Polygon",
  "Coordinates":[
    [ // 单个图形的坐标数组
      [-10.555555,30.746437],
      [-11.555555,31.746437],
      [-12.555555,32.746437],
      [-13.555555,33.746437],
      ...
    ],
    [
      [-10.555555,30.746437],
      [-10.555555,30.746437],
      [-10.555555,30.746437],
      [-10.555555,30.746437],
      ...
    ]
  ]
}

需要将每个独立图形的坐标数组转换为标准GeoJSON中的独立Feature要素,最终输出符合如下结构的标准GeoJSON文件:

{
    "type" : "FeatureCollection",
    "features" : [
        { 
            "type" : "Feature", 
            "properties" : {  
                "Data": "Example"
            }, 
            "geometry" : { 
                "type" : "Polygon", 
                "coordinates" : "从原始文件提取的单个图形坐标"
            }
        }
    ]
}

作为Python初学者,你原本计划使用Numpy实现该需求,作为首个正式Python项目,需要确认最高效的实现方案,完成单个图形坐标数组的拆分,写入为独立Feature要素。

实现方案

这个场景不需要引入Numpy,使用Python内置的json标准库即可完成,代码简单易读,性能完全满足常规GeoJSON文件处理需求,对新手非常友好。

实现步骤

  • 读取原始类GeoJSON文件,加载为Python字典对象,注意原始数据的坐标键为大写开头的Coordinates,和标准GeoJSON的小写键名有区别,读取时不要写错键名
  • 遍历Coordinates下的每一个子数组,每个子数组对应一个独立的Polygon图形
  • 为每个图形构造标准Feature结构,properties字段可按需填充自定义属性
  • 将所有构造好的Feature存入列表,包装为标准FeatureCollection结构
  • 最终将结构导出为符合规范的GeoJSON文件

完整示例代码

import json

# 1. 读取原始文件
with open("your_input_file.geojson", "r", encoding="utf-8") as f:
    raw_data = json.load(f)

# 2. 构造Feature列表
features = []
for shape_coords in raw_data["Coordinates"]:
    # 可选:如果坐标环未闭合,取消下面这行注释补全闭合点
    # shape_coords.append(shape_coords[0])
    feature = {
        "type": "Feature",
        "properties": {
            "Data": "Example"  # 这里替换成你需要的自定义属性
        },
        "geometry": {
            "type": "Polygon",
            "coordinates": [shape_coords]  # Polygon坐标需要嵌套一层环数组
        }
    }
    features.append(feature)

# 3. 构造标准FeatureCollection
geojson_output = {
    "type": "FeatureCollection",
    "features": features
}

# 4. 写入输出文件
with open("output.geojson", "w", encoding="utf-8") as f:
    json.dump(geojson_output, f, ensure_ascii=False, indent=2)

注意:标准GeoJSON规范中,Polygon类型的坐标是三维数组:最外层是Polygon,第二层是环(外环、内环洞),第三层才是具体坐标点,所以代码里给单个图形坐标套了一层[]。如果你的原始子数组本身已经包含外环和内环洞的结构,直接去掉这层嵌套即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:33:18