4

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

4

2 回答 2

0

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

于 2017-08-18T09:16:37.417 回答
0

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

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

输出:

在此处输入图像描述

于 2017-08-18T10:54:26.677 回答