[英]Choropleth map with OpenStreetMap data
我的目标是获得德国邮政编码区域的所谓“等值线图”(我猜)。 我找到了 python 包“folium”,但它似乎需要一个.json
文件作为输入:
https://github.com/python-visualization/folium
在 OpenStreetMap 上,我只看到shp.zip
和.osm.pbf
文件。 在shp.zip
存档中,我发现了各种我从未听说过的文件结尾,但没有.json
文件。 我如何使用来自 OpenStreetMap 的数据来喂食叶草? 我跑错方向了吗?
我自己没有这样做,但有各种解决方案将OSM文件(.osm或.pbf)转换为(geo)json。 例如osmtogeojson 。 可以在OSM wiki的GeoJSON页面找到更多工具。
如果要创建等值区域映射 ,必须执行以下步骤:
首先,您需要一个包含该国家/地区信息的文件。 该答案提供了一个示例.json
文件,但实际上有许多常用于映射的文件格式。 在您的情况下,您需要将OSM形状文件( .shp
)转换为更现代的文件类型,如.geojson
。 值得庆幸的是,我们有ogr2ogr做最后一部分:
ogr2ogr -f GeoJSON -t_srs EPSG:4326 -simplify 1000 [name] .geojson [name] .shp
建议:您还可以从这些网站中提取管理边界:
基于它下载数据(例如.csv
文件)。 显然,该文件必须有一个包含该国家/地区的邮政编码的列。
一旦你得到这些文件,剩下的就很简单了,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',
)
输出:
我去了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。
该答案由 CC BY-SA 3.0 下的 OP user3182532作为对问题Choropleth map with OpenStreetMap data的编辑发布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.