lindem 发表于 2022-9-26 20:38:26

从Openstreetmap获取路网数据并制作shapefile图层

一、从Openstreetmap获取路网数据
Openstreetmap是一种开源地图,简称osm。其包含图层主要有高速公路、铁路、水系、水域、建筑、边界、建筑物等图层。地址为:https://www.openstreetmap.org
Openstreetmap 的具体使用说明及主页,强烈推荐参考
https://wiki.openstreetmap.org/wiki/Main_Page
https://www.openstreetmap.org/help


OSM有四类地图图层:标准地图、自行车地图、交通地图和Humanitarian地图。
这篇文章主要关注的是路网的数据获取,针对不同范围的数据获取,介绍相应的获取方法。

[*] 在获取指定范围数据时,可以使用【导出】功能,进行数据的获取。这里主要有简单导出、Overpass API、OSM星球、Geofabrik下载。


点击网站上的【导出】,出现下面的界面。可以手动在地图上选择不同的区域,也可以直接在红色框里面输入对应的最大最小经纬度坐标。



[*]简单导出    在范围选择完成后,点击导出即可完成数据获取;这种简单导出方法只能导出非常小范围的地图数据。You requested too many nodes (limit is 50000).



简单导出限制在节点50000个



点击导出



保存数据


[*]Overpass API 导出   简单导出方法只能导出非常小范围的地图数据,如果选址的范围较大,在范围选择完成后,点击Overpass API即可完成数据获取。但是该文件不是一个直接以.osm的 OSM XML数据,具体文件内容则是osm数据,因此在使用的时候和.osm没有差别,只需要在文件后面加后缀.osm即可使用。





下载得到的格式为 文件



数据打开后的格式


[*]OSM星球    可以用于下载全球数据,数据量非常大,通常情况我们用不到全球数据,不推荐使用。



[*]Geofabrik下载   与OSM星球类似,Geofabrik提供的是以洲际scale提供的分类数据,二级分类是以国家进行的分类。在Geofabrik下载到的至少是以国家范围为基本的数据,我们一般也不常使用,因此不作推荐。




2.在大多数研究中,经常使用到的是一个城市的路网数据。按照前面的方法,我们需要去查询一个城市的经纬度范围,这样比较繁琐。即使用经纬度范围下载到的城市路网,也会包含一些不属于本城市的数据,因为选择范围是一个矩形,而我们想要的是一个城市准确的路网数据,往往是不规则的,因此我们采用Query 法获取城市路网数据。
使用的入口是 http://www.overpass-api.de/index.html


这里主要包括两步:
第一步:根据城市名获取对应ID。进入Query and Convert Forms,界面如下。在Overpass API Query Form 中输入以下代码(要查哪个城市,将代码中的城市名改一下即可)。注:其中name:zh代表中文地址,否则使用name即可 当然,如果你不喜欢输出格式为XML,也可以将<osm-script>修改为<osm-scriptoutput="json">定义输出数据格式为JSON,一般用默认格式。
<osm-script>
<query type="relation">
    <has-kv k="boundary" v="administrative"/>
        <has-kv k="name:zh" v="郑州市"/>
</query>
<print/></osm-script>


输入相应代码,点击Query

保存Interpreter文件,打开该文件,可以查得relation id 为 3283765,这就代表着郑州市的ID为3283765。后面第二步我们将利用这个ID获取该城市的路网数据。


第二步:根据城市ID获取路网数据。再次在主界面的Overpass API Query Form(即第一个查询框中)输入代码如下,其中代码的<area-query ref=" ">中的数字代码需要修改为ID对应的数字代码,ref的代码值为3600000000+城市ID(例如:郑州的ID为3283765,则郑州对应的ref值为3600000000+3283765=3603283765)。点击右侧的Query按钮,即可将结果从浏览器下载到本地,文件名为可以自己命名保存,打开后即可得到路网数据。此时数据格式仍为OSM标准的格式,需要转换为常用的shp格式。
<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文件
第一部分的内容已经可以从Openstreetmap上获取到各种范围下的路网osm数据文件,但是我们常用的路网数据是shapefile文件,因此需要将其转为shp文件。这里采用ArcGis软件来完成数据转换,需要安装ArcGIS Editor for OpenStreetMap插件。
第一步:安装ArcGIS Editor for OpenStreetMap插件。该插件各版本的下载地址查询:
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。




第二步:将OSM数据转为shp数据

[*]本地新建一个文件地理数据库。



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







补充:前面有一篇爬取公交线路数据的内容,爬取到的是线路的经纬度数据,以点的形式存在,需要将其生成线路shapefile文件,可以利用python进行生成,我们也可以利用arcgis中的工具箱直接生成。具体步骤如下:
第一步:生成点图层,将数据点直接显示,同时将生成的点图层加载到ArcMap中。



显示点坐标



将点数据转变为shp文件



将生成的数据点图层导入

第二步:将点图层转为线图层。选择ArcToolbox->Data Management Tools->要素->点集转线,然后将生成的线图层进行导出为shp文件。





点转线



参考:
https://www.e-learn.cn/topic/3193717
https://zhuanlan.zhihu.com/p/93239773
https://jingyan.baidu.com/article/9225544652542e851648f4fa.html

3212 发表于 2022-9-26 20:48:35

请问一下osm现在是不能用了么,为什么我点进去我的标准模式是一片灰色的,没有任何东西

仓颉 发表于 2022-9-26 20:58:23

可以用的啊

御坂美琴LV5 发表于 2022-9-26 21:08:08

请问一下,我按步骤了操作了,为什么在转化为shp文件时老是报错,提示我未将对象引用设置到对象的实例。[大哭]

Jeffrey 发表于 2022-9-26 21:19:43

请问一下你找到解决办法了吗?我搞了两天还是一直失败心态要崩了

甜心萝卜糕 发表于 2022-9-26 21:27:24

没有,,我直接用天地图矢量化了,自己去画。

嗯? 发表于 2022-9-26 21:42:03

有没有实时的道路速度值呢?

嗯? 发表于 2022-9-26 21:56:53

可以下载历史交通数据吗

模拟飞行资源库 发表于 2022-9-26 22:07:12

可以高德API吧

嗯? 发表于 2022-9-26 22:21:23

感谢,准备照着试下

yangwei850622 发表于 2022-9-26 22:32:40

得吗?最后得到数据没

Speedbird84 发表于 2022-9-26 22:41:00

为什么总是,提示我未将对象引用设置到对象的实例啊?

Pegasus8 发表于 2022-9-26 22:47:30

我也是,我按这个方法也没成功

御坂美琴LV5 发表于 2022-9-26 22:54:33

您好,我按照上面的方法转为了shp格式,可是有部分路段有俩根线,路口处也有点混乱,请问这该怎么解决呀?

生锈的手指、 发表于 2022-9-26 23:08:20

得到了哦

vivichild 发表于 2022-9-26 23:14:13

interpreter怎么打开呀

2428796577 发表于 2022-9-26 23:28:15

同问
同学你现在会了吗

zhangdeze 发表于 2022-9-26 23:40:29

有很多文本编辑软件都可以打开比如notepad++、sublime text

jcnuad 发表于 2022-9-26 23:54:18

请问,如果我只想要高速公路数据,应如何处理?

kimicheng 发表于 2022-9-27 00:04:10

前辈,您下载找到了历史交通数据了吗
页: [1] 2
查看完整版本: 从Openstreetmap获取路网数据并制作shapefile图层