如何从python dump uisng python-geojson格式化geoJSON文件?

时间:2019-03-17 04:30:26

标签: python geojson

我正在尝试使用python和python-geojson创建一个特征数组。我添加了一些功能,例如带有工作坐标的多边形。但是,当我转储时,geoJson文件中没有缩进。全部都在一行上,而mapbox不接受数据。

f

features = []
poly = Polygon([[(2.38, 57.322), (23.194, -20.28), (-120.43, 19.15), (2.38, 57.322)]])


features.append(Polygon([[(2.38, 57.322), (23.194, -20.28), (-120.43, 19.15), (2.38, 57.322)]]))
features.append(Feature(geometry=poly, properties={"country": "Spain"}))


feature_collection = FeatureCollection(features)

with open('myfile.geojson', 'w') as f:
   dump(feature_collection,f)
f.close()

这就是输出的外观。应该缩进而不是像这样聚簇。

{“ type”:“ FeatureCollection”,“ features”:[{“ type”:“ Polygon”,“ coordinates”:[[[2.38,57.322],[23.194,-20.28],[-120.43,19.15 ],[2.38,57.322]]]},{“ geometry”:{“ type”:“ Polygon”,“ coordinates”:[[[2.38,57.322],[23.194,-20.28],[-120.43,19.15] ,[2.38,57.322]]]},“ type”:“功能”,“ properties”:{“ country”:“西班牙”}}}}

2 个答案:

答案 0 :(得分:0)

向您的dump()调用添加“缩进”参数:

with open('myfile.geojson', 'w') as f:
   dump(feature_collection, f, indent=4)

但是,奇怪的是,一段代码不会接受全部一行的JSON。它和合法的JSON一样多。那是该代码中的错误。通常使用“缩进”参数只是为了便于阅读。

答案 1 :(得分:0)

备份一下,有三种类型的GeoJSON对象:

  1. 几何
  2. 功能
  3. FeatureCollection

一个Feature包含一个Geometry,一个FeatureCollection包含一个或多个Features。您不能将Geometry直接放在FeatureCollection内,但是它必须是Feature

在您共享的示例中,您的FeatureCollection包括一个Feature和一个Geometry(在本例中为Polygon)。您需要先将该Polygon转换为Feature,然后再将其添加到FeatureCollection

不确定您是否打算有两个相同的多边形,但是您的示例需要看起来像这样才能输出有效的GeoJSON:

features = []
poly1 = Polygon([[(2.38, 57.322), (23.194, -20.28), (-120.43, 19.15), (2.38, 57.322)]])
poly2 = Polygon([[(2.38, 57.322), (23.194, -20.28), (-120.43, 19.15), (2.38, 57.322)]])


features.append(Feature(geometry=poly1, properties={"country": "Spain"}))
features.append(Feature(geometry=poly2))


feature_collection = FeatureCollection(features)

with open('myfile.geojson', 'w') as f:
   dump(feature_collection,f)
f.close()

缩进在这里无关紧要。

您可以在https://tools.ietf.org/html/rfc7946上阅读比以往更多的有关GeoJSON规范的信息。