我目前有一个GeoJSON FeatureCollection
,但我需要在Python中对此文件执行的函数仅支持GeoJSON几何对象,例如Point
或Polygon
(没有所有属性)并协调数据)。有没有办法简单地将GeoJSON FeatureCollection
转换为Python中的GeoJSON几何对象?
答案 0 :(得分:0)
最简单的方法是遍历您的要素集并从那里提取几何图形。我认为你现在已经找到了问题的答案,因为之后还没有其他帖子?
答案 1 :(得分:0)
要拆分 GeoJSON 特征集合的特征,需要遍历 features 元素并导出每个特征。
for f in data['features']:
if f.get("type") == "Feature":
with open(somefile, "w") as out:
json.dump(f, out)
以下 Python 代码将遍历 GeoJSON 要素集合,并将每个要素拆分为单独的 GeoJSON 文件。
如果源 GeoJSON 文件有 10 个特征,则它们将保存在文件中:1.geojson、2.geojson、...、10.geojson。
import json
import sys
class Splitter:
def __init__(self):
self.count = 0
def check(self, input_file):
print("Input:", input_file)
with open(input_file, encoding="utf-8") as file:
data = json.load(file)
data_type = data.get("type")
if data_type == "FeatureCollection":
for f in data['features']:
obj_type = f.get("type")
if obj_type == "Feature":
self.export_feature(data, f)
else:
print("WARN: non-feature:", obj_type)
elif data_type == "Feature":
print("GeoJSON is already a feature object")
else:
print("WARN: unknown/other type:", data_type)
def export_feature(self, parent, feature):
self.count += 1
name = f"{self.count}.geojson"
print("Output:", name)
if "crs" in parent and "crs" not in feature:
# copy coordinate reference system (CRS) definition from parent
# if not present in feature
feature["crs"] = parent["crs"]
with open(name, "w") as out:
json.dump(feature, out)
##############################################################################
# main #
##############################################################################
if len(sys.argv) < 2:
print("usage: geojson-split.py <file>")
sys.exit(0)
splitter = Splitter()
for f in sys.argv[1:]:
splitter.check(f)
如果需要将 GeometryCollection 拆分为其组件几何,请参阅相关的 answer。