使用OpenStreetMap数据的等值线图

时间:2017-08-18 08:42:52

标签: python openstreetmap choropleth overpass-api folium

我的目标是获得德国邮政编码区域的所谓“等值线图”(我猜)。我发现python包“folium”但似乎需要一个.json文件作为输入:

https://github.com/python-visualization/folium

在OpenStreetMap上我只看到shp.zip和.osm.pbf文件。在shp.zip存档中,我找到了各种各样的文件结尾,我从未听说过,但没有.json文件。如何使用OpenStreetMap中的数据来提供folium?我跑错了方向吗?

编辑/解决方案: 我转到https://overpass-turbo.eu/(通过特定的查询语言QL从openstreetmap检索数据)并点击以下代码:

[timeout:900];
area[name="Deutschland"][admin_level=2][boundary=administrative]->.myarea;
rel(area.myarea)["boundary"="postal_code"];
out geom;

您可以“导出到geojson”但在我的情况下不起作用,因为它太多的数据无法在浏览器中处理。但导出“原始数据”有效。所以我做了那个然后我使用“osmtogeojson”来获得正确的格式。之后,我能够按照folium教程中的描述将我的openstreetmap数据提供给folium。

2 个答案:

答案 0 :(得分:0)

我自己没有这样做,但是有各种解决方案可以将OSM文件(.osm或.pbf)转换为(geo)json。例如osmtogeojson。可以在OSM wiki的GeoJSON页面找到更多工具。

答案 1 :(得分:0)

如果您想创建等值线图,您必须按照以下步骤操作:

  1. 首先,您需要一个包含该国家/地区信息的文件。此答案提供了一个示例.json文件,但实际上有许多常用于地图的文件格式。在您的情况下,您需要将OSM形状文件(.shp)转换为更现代的文件类型,如.geojson。值得庆幸的是,我们ogr2ogr做了最后一部分:

      

    ogr2ogr -f GeoJSON -t_srs EPSG:4326 -simplify 1000 [name] .geojson [name] .shp

    建议:您还可以从这些网站中提取管理边框:

  2. 根据它下载数据(例如.csv个文件)。显然,该文件必须有一个包含该国家/地区邮政编码的列。

  3. 一旦你得到这些文件,剩下的就很简单了,Follium会自动创建一个等值区域图。

  4. 我写了一个关于美国失业率的简单例子:

    <强>代码:

    import folium
    import pandas as pd
    
    osm = folium.Map([43, -100], zoom_start=4)
    
    osm.choropleth(
        geo_str = open('US_states.json').read(),
        data = pd.read_csv("US_unemployment.csv"),
        columns = ['State', 'Unemployment'],
        key_on = 'feature.id',
        fill_color = 'YlGn',
    )
    

    <强>输出:

    enter image description here