繁体   English   中英

带有 OpenStreetMap 数据的等值线图

[英]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页面找到更多工具。

如果要创建等值区域映射 ,必须执行以下步骤:

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

输出:

在此输入图像描述

我去了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM