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
相关产品推荐
相关产品推荐

