Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有OpenStreetMap数据的Choropleth地图_Python_Openstreetmap_Choropleth_Overpass Api_Folium - Fatal编程技术网

Python 带有OpenStreetMap数据的Choropleth地图

Python 带有OpenStreetMap数据的Choropleth地图,python,openstreetmap,choropleth,overpass-api,folium,Python,Openstreetmap,Choropleth,Overpass Api,Folium,我的目标是得到德国邮政编码地区的所谓“choropleth地图”(我猜)。我找到了python包“folium”,但它似乎需要一个.json文件作为输入: 在OpenStreetMap上,我只看到shp.zip和.osm.pbf文件。在shp.zip归档文件中,我找到了各种我从未听说过的文件结尾,但没有.json文件。如何使用OpenStreetMap中的数据来输入folium?我走错方向了吗 编辑/解决方案: 我转到(它通过一种特定的查询语言QL从openstreetmap检索数据),并点击

我的目标是得到德国邮政编码地区的所谓“choropleth地图”(我猜)。我找到了python包“folium”,但它似乎需要一个.json文件作为输入:

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

编辑/解决方案: 我转到(它通过一种特定的查询语言QL从openstreetmap检索数据),并点击运行以下代码:

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

您可以“导出到geojson”,但在我的例子中,这不起作用,因为太多的数据无法在浏览器中处理。但导出“原始数据”是可行的。所以我这样做了,然后我用“osmtogeojson”来获得正确的格式。在此之后,我能够将openstreetmap数据提供给folium,如folium教程中所述。

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

如果要创建choropleth地图,必须遵循以下步骤:

  • 首先,您需要一个包含该国各地区信息的文件。这个答案提供了一个示例
    .json
    文件,但是,实际上地图通常使用许多文件格式。在您的情况下,需要将OSM形状文件(
    .shp
    )转换为更现代的文件类型,如
    .geojson
    。谢天谢地,我们必须完成最后一部分:

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

    建议:您还可以从以下网站提取管理边界:

  • 基于它下载数据(例如
    .csv
    文件)。显然,该文件必须有一列包含该国家的邮政编码

  • 一旦你得到这些文件,剩下的就很简单了,Follium会自动创建choropleth贴图

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

    代码:

    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',
    )
    
    输出:

    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',
    )
    

    以前没有这样做过,但我也会很快需要它。如果它有助于查看关于类似主题的帖子。“这个答案提供了一个示例.json文件,但您也可以从形状文件(.shp)创建此文件。”->这基本上是我的问题:如何处理openstreetmap数据以将其提供给folium?你能提供这部分的更多细节吗?地图是自动从OpenStreetMap中提取的。像
    .json
    这样的文件只包含关于边框的信息。您想知道如何将
    .shp
    文件转换为
    .json
    文件吗?是的,我想这是我需要完成的步骤。使用folium本身似乎很简单。我需要从openstreetmap(无论是什么文件)中获取邮政编码边框信息,将其转换为.json,然后使用tutroial/your post中的代码。您可以使用我发布的小程序提取管理边框线。有很多方法可以做到这一点,但大多数都不是微不足道的。那么我需要从openstreetmap下载哪个文件呢?我需要一个包含邮政编码区域边界的。我找不到它。之后我想我可以试试那些转换工具。这是一个不同的问题。通常,OSM文件包含OSM中可用的所有信息。如果您只需要邮政编码,那么可以从OSM文件中提取邮政编码(例如通过osmium),或者首先使用Overpass API只下载邮政编码。不管怎样,评论都不适合详细解释这些步骤。另外,关于只下载特定OSM数据的问题已经被回答了好几次(在这里和help.openstreetmap.org上)。@user3182532:@scai是对的,这是一个不同的问题。您询问了如何使用
    .shp
    文件来馈送文件。从OSM中提取管理边界线并非易事。