如何优雅的从OSM(OpenStreetMap)上获取一个城市的路网?


在科研、竞赛中,很多时候需要获取一个城市的交通路网数据,一般而言就会从开源的公开地图数据Openstreetmap中获取。Openstreetmap(简称osm)其包含图层主要有高速公路、铁路、水系、水域、建筑、边界、建筑物等图层。其中OSM的下载主页为: 传送门。使用说明为: 传送门

申明:

OKK,下面正式开始介绍——以下载福建省南平市路网为例。

一、通过Overpass API获取OSM文件

1、在openstreetmap上搜会发现,南平市的行政区域是不规则的,但是直接通过openstreetmap上只能通过小范围的矩形经纬度进行框选直接导出,这显然不符合我们的需求。(重点:可以记一下下图框选出来的南平市ID
在这里插入图片描述
2、Overpass API是一个可以写代码获取一个城市路网的接口。具体使用方法为:

① 根据城市名获取城市的ID:
进入网页,然后在Overpass API QueryForm这个窗口中输入以下代码(需要把南平市替换为您的目标城市),然后点击query,就会下载一个interpreter的文件。

<osm-script>
	<query type="relation">
	    <has-kv k="boundary" v="administrative"/>
		<has-kv k="name:zh" v="南平市"/>
	</query>
	<print/>
</osm-script>

打开下载的文件(记事本打开就行),可以看到一个ID,这个ID与第一步在openstreetmap中写的城市ID是一致的。
在这里插入图片描述
② 依据城市的ID获取路网数据:还是在网页,然后在Overpass API QueryForm这个窗口中输入以下代码(需要把<area-query ref="3603283765"/>中的数字替换为您的目标城市的ID+3600000000,也就是前三位为360,后面7位数是上一步得到的城市ID),然后点击query,又会下载一个interpreter的文件。

<osm-script timeout="1800" element-limit="100000000">
  <union>
    <area-query ref="3603283765"/>
    <recurse type="node-relation" into="rels"/>
    <recurse type="node-way"/>
    <recurse type="way-relation"/>
  </union>
  <union>
    <item/>
    <recurse type="way-node"/>
  </union>
  <print mode="body"/>
</osm-script>

二、OSM文件转为shapefile

刚刚下载的interpreter文件在ArcGis中打不开,需要进行转换。

1、安装ArcGIS Editor for OpenStreetMap插件

资源下载:https://blog.csdn.net/weixin_41070993/article/details/120982415
下载地址查询:

  • https://www.esri.com/en-us/arcgis/products/arcgis-editor-for-openstreetmap
  • https://github.com/Esri/arcgis-osm-editor

下载后直接解压,双击对应版本.exe安装即可,安装完成后。打开ArcMap,发现ArcToolbox还没有该插件,点击自定义,勾选上Openstreetmap,将插件添加到工具箱中,工具箱会出现OpenStreetMap Toolbox.tbx。

2、将OSM数据转为shp数据

① 在本地新建一个文件地理数据库。
在这里插入图片描述

② 使用OpenStreetMap Toolbox.tbx工具中的Load OSM File功能,将生成结果输出到新建的文件地理数据库。转换完成后,会生成点线面shp文件,对应着不同的数据信息,可以查看官方文档对不同字段的定义。这时文件地理数据库中存储着转换后的数据,我们只需要将路网图层导出为shapefile文件就可以了。
在这里插入图片描述
会生成一个数据集
在这里插入图片描述

上述的图和说明都是直接复制前人的,确实写的不错。踩坑点在于:文件路径不能出现中文,否则会出现线状图层没数据。

三、路网数据处理

1、数据字段含义

从openstreetmap上下载的数据其实很乱的,字段含义也与国内的道路分级不太相同,我们依然可以根据下面的图表按照需求进行处理。
我们打开道路SHP数据属性表,OSM对道路的分级在fclass字段里,字段里包含27个分类。

  • tertiary(第三级道路):城市支路,
  • tertiary_link(第三级道路-连接):匝道,机场集散车行道路(数据量极少,多是未知道路)
  • residential(居住区道路):居住区车行道路,
  • unclassified(未分类道路):居住区车行道路,滨水车行道路,机场机动车通道
  • secondary(次要道路):城市次要车行道路,机场外围车行道路,
  • secondary_link(次要道路-连接):城市次要车行道路立交、匝道(数据量少,部分零散分布未知类别)
  • primary(主要道路):城市主要车行道路
  • primary_link(主要道路):城市主要车行道路立交,城市主要车行道路匝道(数据量少,部分零散分布未知类别)
  • motorway(高速公路):高速公路,过江隧道
  • motorway_link(高速公路-连接):高速公路立交,匝道
  • trunk(干道):高架快速路,机场进站快速路,过江隧道,桥上快速路
  • trunk_link(干道-连接):立交,匝道,桥上引道,机场进站快速路,国道改道
  • track(小路):郊区、乡村、工矿区、田间、林间小路
  • track_grade1(小路 级别1):郊区、乡村、工矿区、田间、林间小路
  • track_grade2(小路 级别2):郊区、乡村、工矿区、田间、林间小路
  • track_grade3(小路 级别3):郊区、乡村、工矿区、田间、林间小路
  • track_grade4(小路 级别4):郊区、乡村、工矿区、田间、林间小路
  • track_grade5(小路 级别5):郊区、乡村、工矿区、田间、林间小路
  • bridleway(马道):体育场馆内部专用道路(数据量极少,零星道路在公园、居住区内部)
  • living_street(生活街道):居住区车行道路,公园车行道路
  • path(小道):公园车行道路,居住区车行道路(分布零碎,量少)
  • service(服务性道路):居住区车行道路,火车站集散车行道,公园车行道路,公共建筑集散车行道,公交枢纽入口车行道路,停车场入口车行道路
  • footway(人行道):滨水绿道,公园步行道,广场步行道,大学步行道路,人行道,火车站人行集散道路
  • pedestrian(步行街道):步行街,广场步行道路,公园步行道路,居住区步行道路
  • steps(台阶踏步):人行过街天桥台阶,广场台阶、公共建筑入口台阶,登山台阶
  • cycleway(自行车道):滨水绿道,非机动车道,公园自行车道
  • unknown(未知道路):滨水车行道路,校园广场车行道路,乡道(数据量少,比较难判别道路类型)

然后,还可能出现水系、行政边界啥的,就很乱。按照需求采用删掉不合规的数据。

具体咋做?先调出edit的窗口,start editing然后把不合规的全部删掉。

2、根据路网提取路段交点

这个道路数据除了特别乱,而且拓扑关系也乱,线图层可以视作路段,点图层是路段矢量化的点,太多了不适合做分析,因此本文想提取出所有路段交点,用路段交点打断路网,生成一个点图层和一个线图层。

① 将所有路段合并为一个矢量要素

start editing,选中所有的要素,点击“合并”
在这里插入图片描述

② 打断相交线
在这里插入图片描述

③ 建立网络数据集
在这里插入图片描述
然后一直按next,建立完之后就形成了一个图层
在这里插入图片描述
具体的操作看这个

四、总结

记录是为了避免重复的学习

  • 58
    点赞
  • 323
    收藏
    觉得还不错? 一键收藏
  • 40
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值