Geojson format基本上几乎是常规JSON,但coordinates
键除外:
{
"type": "Feature",
"geometry":
{
"type": "LineString",
"coordinates": [
[10, 20], [30, 40]
]
}
}
与常规JSON的区别在于,键coordinates
的值没有双引号(在GIS中我们称之为原始几何数据)。
在Python中,常规JSON可以简单地定期dict()
- 所以为了简单起见,这就是我想要存储Geojson数据的方法。出口它:
# example fr single feature Geojson file
geojson_dict = dict()
geojson_dict['type'] = 'FeatureCollection'
geojson_dict['features'] = []
geojson_dict['features'].append(dict())
geojson_dict['features'][0]['type'] = 'Feature'
geojson_dict['features'][0]['geometry'] = dict()
geojson_dict['features'][0]['geometry']['type'] = 'LineString'
geojson_dict['features'][0]['geometry']['coordinates'] = '['+coordinates_as_string+']'
geojson_dict['features'][0]['properties'] = dict()
geojson_dict['features'][0]['properties']['id'] = 123
with open('filename.geojson', 'w') as outfile:
json.dump(geojson_dict, outfile, indent=4)
我的问题:
有没有办法继续使用Pythonic字典(或类似容器),并删除特定值的双引号?由于Pythonic字典默认在任何键和值周围加上双引号(作为常规JSON)。
注意:
我不是在寻找使用if key == 'coordinates'
迭代键值并将其写入文本文件等的解决方案。
答案 0 :(得分:2)
python字典的值(和键,关键字)不一定需要是字符串。实际上,您已经使用列表作为关键“功能”的值。
您只需在坐标字段中指定列表列表即可。
geojson_dict['features'][0]['geometry']['coordinates'] = [[10, 20], [30, 40]]
另外,我建议你看看GeoJSON package广告。它是处理GeoJSON对象(几何,特征,集合)的有用库。
答案 1 :(得分:1)
您可以使用literal_eval()
库中的ast
函数从字典值中删除双引号。在提供的JSON数据中,我们可以这样做:
import ast
geo = {
"type": "Feature",
"geometry":
{
"type": "LineString",
"coordinates": "[[10, 20], [30, 40]]"
}
}
v = geo['geometry']["coordinates"]
geo['geometry']["coordinates"] = ast.literal_eval(v)
print(geo)
Output: {'type': 'Feature', 'geometry': {'type': 'LineString', 'coordinates': [[10, 20], [30, 40]]}}