将Python字典导出到Geojson - 从'coordinates'中删除双引号值

时间:2018-04-14 13:32:59

标签: python json dictionary geojson

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'迭代键值并将其写入文本文件等的解决方案。

2 个答案:

答案 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]]}}