我的目标是获得德国邮政编码区域的所谓“等值线图”(我猜)。我发现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。
答案 0 :(得分:0)
我自己没有这样做,但是有各种解决方案可以将OSM文件(.osm或.pbf)转换为(geo)json。例如osmtogeojson。可以在OSM wiki的GeoJSON页面找到更多工具。
答案 1 :(得分:0)
如果您想创建等值线图,您必须按照以下步骤操作:
首先,您需要一个包含该国家/地区信息的文件。此答案提供了一个示例.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',
)
<强>输出:强>