我的目标是在德国的邮政编码区域获得所谓的“等值面地图”(我猜是这个)。我已经找到了Python包“folium”,但似乎它需要一个.json文件作为输入:https://github.com/python-visualization/folium。在OpenStreetMap上,我只看到shp.zip和.osm.pbf文件。在shp.zip存档中,我发现各种我从未听说过的文件结尾,但没有.json文件。我该如何使用来自OpenStreetMap的数据来提供给folium?我是否走错了方向?
.json
文件,但实际上有许多常用于地图的文件格式。在您的情况下,您需要将OSM形状文件(.shp
)转换为更现代的文件类型,如.geojson
。幸运的是,我们有ogr2ogr来完成这最后一步:ogr2ogr -f GeoJSON -t_srs EPSG:4326 -simplify 1000 [name].geojson [name].shp
建议:您还可以从这些网站中提取行政边界:
* [OSM Boundaries Map 4.2][2]
* [Mapzen][3]
* [Geofabrik][4]
下载基于它的数据(例如 .csv
文件)。显然,该文件必须有一个包含该国邮政编码的列。
一旦获得这些文件,其余部分就很简单了,Folium 将自动创建等值线地图。
我写了一个关于美国失业率的简单示例:
代码:
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
文件转换为.json
文件吗? - mforpe我本人没有做过这个,但是有各种解决方案可以将OSM文件(.osm或.pbf)转换为(geo)json。例如 osmtogeojson。更多工具可以在OSM维基中的GeoJSON页面找到。
.shp
文件来提供folium。从OSM中提取行政边界线并不容易。 - mforpe我访问了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。
这个答案是由edit发布的,关于使用OpenStreetMap数据制作分级地图Choropleth map with OpenStreetMap data,由OP user3182532 在CC BY-SA 3.0下发布。