Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)

一、背景

Open street Map 是一个很好的开源数据获取源,本人正在做关于芝加哥的研究需要用到路网数据,因此需要从Open street Map 下载数据。

二、数据下载方法

1.简单粗暴法(适合小范围数据下载)

进入OpenStreetMap官网,在搜索栏里搜索数据的所在位置,点击导出按钮,可调整矩形框的大小,点击Overpass API 下载。下载文件的格式为.osm

2.利用Over pass API 索引下载数据(适合城市尺度的数据下载)

进入Over Pass API官网:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》

(1)获取城市的ID

点击Frontends 菜单下的 Query and Convert Forms:

《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
在第一个Query Form 里输入:

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

v="成都市"这个部分改成任意想要查找的城市名称,比如武汉,芝加哥等。点击Query,下载弹出来的文件为OSM格式,利用记事本打开,找到<relation id="2782246">, 即可拿到成都市的ID为2782246

(2)利用ID下载路网数据

再次在Query Form 里输入:<area-query ref="3602782246"/>改成3,600,000,000+刚刚获取的id号,这里为3602782246,点击Query,即可下载路网数据。格式为OSM格式,后续需要转换为shp格式。这里为啥加3600000000有大神知道吗,我看网上教程都是这么做的,但不知道具体的情况

<osm-script timeout="1800" element-limit="100000000">
  <union>
    <area-query ref="3602782246"/>
    <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>

该方法亲测中国城市的道路数据都能下载下来,但是我的研究城市是芝加哥,就出现问题了,下载道路数据的时候,打开文件为:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
显示查询内存不足,一脸懵逼的我尝试了多种方法都无法解决这个问题,我猜测是否国外的ID不是加3600000000,这方面也没查到资料,于是放弃该方法,但该方法下载中国城市路网数据还是可用的。
于是转到方法三。

3.利用geofabrik下载数据(可下载全球的数据,但数据量大,需要自己裁剪)

(1)下载数据

利用geofabrik可以下载全球的数据,数据量挺大,但是下载还挺快的,而且可以下载历史的数据。进入geofabrik官网
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》

在这里可以下载全球的数据,我需要芝加哥的数据,所以点击North America ,进入到北美的区域界面,如果需要全北美的数据,就可以直接点旁边的[.osm.pbf]或者是[.osm.bz2],我这里只需要部分数据,所以进入子页面:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
进一步选择研究区所在的子区域,我这里选择US MidWest,右面有个地图的小窗口,能够显示数据显示的范围,可以通过这个窗口看自己所需要的区域是否在该数据范围内。为了下载跟研究区时间一致的数据,点击Other Formats and Auxiliary Files 下面的raw directory index,这里列出了所有的历史数据:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
这样就可以根据自己需要下载对应的数据,这里有两种格式:.osm.pbf 和.osm.bz2,这两种格式都是压缩版的osm文件,pbf文件相较于bz2文件量会更小,这里我下载的是.pbf文件,点击所需要下载的文件,就能够下载下来数据了。

(2)pbf格式转换为osm,并粗略的裁剪一下范围(不裁剪的话转成shp文件会太大而且很慢)

这里需要用到osmconvert,先把该工具下载,下载地址:osmconvert官网下载,注意:该工具的存储的地址应该跟你需要处理的数据放在同一个文件夹里。比如我的数据在D:\DATA,那么该工具也需下载到D:\DATA里。
下载后,以管理员方式打开该工具:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
输入a:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
复制一下你下载的文件名:这里有个需要注意,文件名要加上后面的pbf,比如我这里文件名应该输入:usmidwest140101.osm.pbf,否则会显示找不到:

《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
第一步是将pbf格式解压缩,准换为osm格式(原因是在未解压缩的文件无法转为shp格式,所以先需要转换为osm格式),在程序中输入1:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》

在程序中输入1,转化为.osm格式,转换过程需要一点时间,它会自动生成一个新的.osm格式的文件:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》

第二步是对该文件进行裁剪,主要目的是为了减少文件量,方便后面转为shp文件,否则会很慢。
同样打开osmconvert,输入文件名:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
输入3,进行文件的裁剪:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
输入研究区最小经度,最小纬度,最大经度,最大纬度,这个范围可以在OpenStreetMap官网里面点导出,或者是自己框选范围的时候能够看到:裁剪后自动生成新的文件,这样就完成了数据的下载和转化了。
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》

三、OSM文件转shp文件(Arcmap能够直接看到)

网上的教程有许多方法,我这里用的是ArcGIS Editor for OpenStreetMap插件来进行转换,插件地址:https://pan.baidu.com/s/11HMD5KvCvOGR1JOvlWeUlg
提取码:u2x5
安装好后,打开Arcmap在自己的目录里新建一个文件地理数据库(用于存放转换的数据),在系统工具箱里的open street map toolbox里找到 load OSM File,将生成结果输出到新建的文件地理数据库(必须新建一个文件地理数据库才能转换成功),之后用ArcGIS随意转换需要的shp等格式。
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》
转换后,再利用研究区的边界对数据进行裁剪,就得到了所需的数据:
《Open Street Map 全球城市路网数据下载并转为SHP格式(包含历史道路数据的下载方法)》

四、总结

小范围用方法1,中国城市路网数据用方法2,全球数据以及需要历史数据用方法3。
再分享一个集合了多源数据的全球路网数据:https://www.globio.info/download-grip-dataset这个数据我也试着下载了,数据也非常不错,如果需要做全球尺度的研究,这个数据集是个不错的选择

最后,如果有更简单的方法,欢迎大家分享交流!!

    原文作者:叶子GISer
    原文地址: https://blog.csdn.net/qq_37004534/article/details/115329025
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞