【问题标题】:Choropleth map with OpenStreetMap data带有 OpenStreetMap 数据的 Choropleth 地图
【发布时间】:2017-08-18 08:42:51
【问题描述】:

我的目标是获取德国邮政编码区域的所谓“等值线地图”(我猜)。我找到了 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。

【问题讨论】:

  • 以前没有这样做过,但我很快就会需要它。如果有帮助,请查看 this 类似主题的帖子。

标签: python openstreetmap choropleth overpass-api folium


【解决方案1】:

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

【讨论】:

  • 那么我需要从openstreetmap下载哪个文件?我需要一个包含邮政编码区域边界的。我找不到它。在那之后我想我可以试试那些转换工具。
  • 这是一个不同的问题。通常,OSM 文件包含 OSM 中可用的所有信息。如果您只需要邮政编码,则可以从您的 OSM 文件中提取它们(例如通过 osmium),或者首先使用 Overpass API 仅下载邮政编码。无论哪种方式,评论都不适合详细解释这些步骤。此外,关于仅下载特定 OSM 数据的问题已经回答了好几次(这里,gis.stackexchange.com 和 help.openstreetmap.org)。
  • @user3182532:@scai 是对的,这是一个不同的问题。您询问如何使用.shp 文件来喂叶。从 OSM 中提取行政边界线并非易事。
【解决方案2】:

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

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

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

    建议:您还可以从这些网站中提取行政边界:

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

  3. 获得这些文件后,剩下的就很简单了,Follium 会自动创建等值线图。

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

代码:

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 /您的帖子中的代码。
  • 您可以使用我发布的小程序提取行政边界线。有很多方法可以做到这一点,但大多数都不是微不足道的。
猜你喜欢
  • 1970-01-01
  • 2017-03-10
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多