Openstreetmap 下载路网数据
Openstreetmap 下载路网数据的备忘
资料来源:
https://zhuanlan.zhihu.com/p/141740446
https://github.com/gboeing/osmnx更新
1
2022.01.11 初始
导语
因为项目原因,必须要用到路网数据,只能自己找…
一番 google 后发现 公开的路网数据仅 osm 一家.
前排风险提示:
- osm 地图在边界问题上与中国官方立场不同
- 项目任何涉及大比例缩略图 / 国界线 等情况时,一定要记得换源.不要埋下风险点,这个风险点等级还不低,特别是在现在的大环境下.
- 路网等仅涉及城市级别一般无问题.
- OSM 数据均为 WGS 坐标
- OSM 的道路等级可能与国内常见分类不同,有细致需求,请详细对比后使用.
需求
- 下载某个地区(例如上海)的路网数据
- 要能过滤掉等级比较低道路(例如小区内道路)
- 需要转换成 GIS 常见格式
下载路网数据
目前从 osm 下载路网数据有这么几个途径
osm 网页端矩形框选取导出:
- 需要明确范围且区域较小时使用
- 限制节点在 50000 个
- 还有一个类似的 [overpass-turbo](https://overpass-turbo.eu/
overpass-api 下载
- 网页矩形选择能干的,也能干.
- 包括分城市下载,没有节点总数限制.
- 如果不是用 osmnx 下载,那是首选了.
osm 星球 下载全球数据,几十G.
- 一般不用
geofabrik 提供以国家/一部分城市为单位的数据
- 下载全国数据,这个最方便
- china 数据大约 823 MB
osmnx python 包下载 osm 数据
- 各类分类数据+过滤+格式转换
- 项目以 python 为主,自然是选这个了.
osmnx
osmnx 提供了非常方便的 py 下载 osm 数据的选择.
- 官方文档
- 官方例程
- 如果在项目中使用,需要标明引用
Boeing, G. 2017. "[OSMnx: New Methods for Acquiring, Constructing, Analyzing, and Visualizing Complex Street Networks](https://geoffboeing.com/publications/osmnx-complex-street-networks/)." _Computers, Environment and Urban Systems_ 65, 126-139. doi:10.1016/j.compenvurbsys.2017.05.004
下面的例子以下载上海地区路网为例
osm 路网等级
- 参考 Key:highway
- 我们需要下载的是 tertiary 及以上等级的路网数据
主要使用 osmnx.graph.graph_from_place 函数
- 我们需要传入 3 个参数
- place: 支持拼音,这里就是
Shanghai, China
- network_type: 下载的地图种类,路网数据所以是
drive
- custom_filter: 自定义的过滤器,这里想要的是 tertiary 及以上等级
["highway"~"motorway|trunk|primary|secondary|tertiary"]
- highway 下面的 motorway 到 tertiary.
- place: 支持拼音,这里就是
- 其他细节见 官网文档
- custom-filters 的官方示例
1 | place = "Shanghai, China" |
整个过程大概 4-5 分钟,之后调用 save_graphml
保存到本地
1 | # Gfile 为保存到本地的路径 |
一般而言某个城市的路网数据在 几十MB 量级.
转换 shp
下面这段转换代码来自 fmm-examples#1-download_network.ipynb
- 毕竟下载路网数据就是要到 fmm 中用啊
- 至于 fmm 😔,还有不少坑…
1 | path = "./" |
正常执行完毕后会在对应路径生成 node + edge 文件.