文章转载自(http://www.mapboxx.cn/article/osm-way/)
OpenStreetMap社区是一个由地图制作爱好者组成的社区,这些爱好者提供并维护世界各地关于道路、小道、咖啡馆、铁路车站等各种各样的数据。 OpenStreetMap开源项目可以让程序开发更加灵活,图源更加丰富,例如可以使用谷歌地图,以解决国内无法使用谷歌服务的尴尬。 国内户外导航软件,例如:行者、户外帮和小狼信标都使用了OpenStreetMap。
OpenStreetMap地图官网: (https://www.openstreetmap.org/#map=9/26.7763/106.6965)
通过OpenStreetMap地图获取城市道路网数据其实很简单,主要分为两个步骤:
- 根据城市名获取对应ID
- 据城市ID获取路网数据 下面将具体详细步骤:
根据城市名获取对应ID
- 进入 (http://www.overpass-api.de/index.html)
- 点击第二栏的Query -> Query and Convert Forms
- 在Overpass API Query Form下方的输入框中输入代码:
<osm-script>
<query type="relation">
<has-kv k="boundary" v="administrative"/>
<has-kv k="name:zh" v="成都市"/>
</query>
<print/></osm-script>
其中name:zh
代表中文地址,否则使用name
即可 当然,如果你不喜欢输出格式为XML
,也可以将<osm-script>
修改为<osm-script output="json">
,定义输出数据格式为JSON。
点击右侧的Query按钮,即可将结果从浏览器下载到本地,文件名为interprept
, 用记事本打开该文件,找到<relation id="2782246">
, 即可拿到成都市的ID为2782246
。
根据城市ID获取路网数据
- 上面的输入框中的代码替换为如下:
<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>
其中<area-query ref="3602782246"/>
中3602782246
是上一步骤中拿到的ID加上360000000
后得到的数字。 - 点击右侧的Query按钮,即可将结果从浏览器下载到本地,文件名为interprept
,打开后即可得到路网数据。