xjmdjy 发表于 2022-10-23 02:33:57

OpenStreetMap简介

我们在做智慧城市相关项目时,往往离不开地图数据。以往获取路网拓扑结构数据多是购买gis地图。现在常用的电子地图为国内的百度/高德地图以及国外的谷歌地图。但是,这些电子地图API开放权限可能很小或者访问频次受到限制又或者可能收费较高。
这里推荐一款开源地图—openstreetmap,简称OSM。其图层主要有高速公路、铁路、水系、水域、建筑、边界、建筑物等。不仅能够免费下载城市数据还可以下载全球数据。网址为https://www.openstreetmap.org/
在首页上有编辑、历史和导出3个按钮,下载数据时,点击导出。OSM主要提供Simple、Overpass API、OSM星球和Geofabrik下载等四种方式。


openstreetmap
Simple直接导出框中数据,或者鼠标拖动调整范围。
Overpass API提供按照bbox方法的数据下载。
OSM星球 提供整个OSM数据下载,但是下载的数据量较大。
Geofabrik下载 提供各大洲、国家和特定城市数据。
Simple,网站左侧提供矩阵框方法作为最简单的下载方法,进行框选区域的数据下载,此时下载的数据结构是XML格式,而不是矢量数据。该方法不支持非规则区域和过大区域的数据导出。


Simple导出
使用Overpass API方法下载数据,数据的选择方式同Simple,下载时点击Overpass API下载。该方法是Simple的补充,可以进行更大区域的数据获取。
OSM星球,下载全球数据,数据量达到几十G,通常情况用不到全球数据,不推荐使用。
Geofabrik下载,点击Geofabrik下载,跳转后出现的是洲级别的数据集,而且大部分数据集不提供shp格式。
注意事项:当使用区域涉及到国家边界和领土问题时,OSM数据存在争议的,一定不要使用OSM数据。
其他方法:
实际项目中,往往需要获取某个市或某个区的GIS数据,但其形状多为不规则。采用以上方法获取的数据全面,而且繁杂。下面将提供一种通过查询的方法来获取路网数据。
Query法:
主要分为两个步骤:
1.获取城市对应的ID,
2.根据城市ID获取路网数据。
下面将以获取XXX市的路网数据为例进行演示。
首先获取城市ID:
http://www.overpass-api.de/index.html 中,选择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="XXX市"/></query><print/></osm-script>其中name:zh 代表中文地址。根据需要调整为对应的城市,自己填入城市名称即可。


Query
点击右侧的Query按钮,即可将结果从浏览器下载到本地,文件名为interprept, 用记事本打开该文件,找到<relation id="2110264">, 即可拿到XXXX市的ID为2110264


其次根据城市ID获取城市路网数据:
上面的输入框中的代码替换为如下:
<osm-script timeout="1800" element-limit="100000000"><union>    <area-query ref="3602110264"/>    <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="3602110264"/>中3602110264是上一步骤中拿到的ID加上360000000后得到的数字。 点击右侧的Query按钮,即可将结果下载到本地,文件名为interprept,打开后即可得到地图数据。
得到某一区域的GIS数据后,就可以进行后续的城市建模等工作。

有内涵才man 发表于 2022-10-23 02:39:50

转发了
页: [1]
查看完整版本: OpenStreetMap简介