OSM是一款由网络大众共同打造的免费开源、可编辑的地图服务。OpenStreetMap它是利用公众集体的力量和无偿的贡献来改善地图相关的地理数据。OSM是非营利性的,它将数据回馈给社区重新用于其它的产品与服务。而其他地图则是将大多数的地图数据出售给第三方。
OSM的地图由用户根据手提GPS装置、航空摄影照片、其他自由内容甚至单靠地方智慧绘制。网站里的地图图像及向量数据皆以共享创意姓名标示-相同方式分享2.0授权。
OpenStreetMap的优缺点:优点:数据开放,可自己搭建服务器,自己修改数据,有前景(最近发展很快);缺点:数据尚不完善,资源不是十分丰富。
官方(维基)给出的原因:
免费维基世界地图(OpenStreetMap),为任何需要的人,创建并提供象道路图之类自由的地理数据。启动这个项目的原因是,很多人们以为免费的地图,其实有很多法律和技术上的限制,阻碍了人们对地理数据富有创意的、以不可预知的方式进行再利用。
http://wiki.openstreetmap.org/wiki/Zh-hans:Main_Page
(一)获取地图数据
我们可以在openstreetmap.org网站获取我们需要的数据,可以指定区域,也可以选择一个城市或者国家,获取其地理数据,获取的数据有多种形式,大家可根据自己的开发需求确定自己需要的类型。
我下载了后缀名为为.osm 的数据文件。
(二)OSM数据的数据结构
首先,看一下OpenStreetMap的数据结构:
OpenStreetMap的元素(数据基元)主要包括三种:点(Nodes)、路(Ways)和关系(Relations),这三种原始构成了整个地图画面。其中,Nodes定义了空间中点的位置;Ways定义了线或区域;Relations(可选的)定义了元素间的关系。
Node
node通过经纬度定义了一个地理坐标点。同时,还可以height=标示物体所海拔;通过layer= 和 level=,可以标示物体所在的地图层面与所在建筑物内的层数;通过place= and name=*来表示对象的名称。同时,way也是通过多个点(node)连接成线(面)来构成的。
实例:
changeset="2369219" user="spytfyre" uid="166957" visible="true"
timestamp="2009-09-04T13:35:42Z">
Way (way ,closed way ,area)
通过2-2000个点(nodes)构成了way。way可表示如下3种图形事物(非闭合线、闭合线、区域)。对于超过2000 nodes的way,可以通过分割来处理。
Open polyline ( way)
非闭合线:收尾不闭合的线段。通常可用于表示现实中的道路、河流、铁路等。
Closed polyline (closed way)
闭合线:收尾相连的线。例如可以表示现实中的环线地铁。
Area (area)
区域:闭合区域。通常使用landuse=* 来标示区域等。
实例:
version="1" changeset="2954960" user="Ed Avis" uid="31257">
ref =* 代表了连接成线的点。
Relation relation
一个Relation可由一系列nodes, ways 或者其他的relations来组成,相互的关系通过role来定义。一个元素可以在relation中被多次使用,而一个relation可以包含其他的relation。
version="2" changeset="3023369" user="Jonathan Bennett" uid="5352">
表示:从id为”4418767”的way,经270186的node,至id为”4641665”的way
Tag
标签不是地图基本元素,但是各元素都通过tag来记录数据信息。通过’key’ and a ‘value’来对数据进行记录(了解xml或者数据库的应该都比较清楚了吧?)。例如,可以通过highway=residential来定义居住区道路;同时,可以使用附加的命名空间来添加附加信息,例如:maxspeed:winter=*就表示冬天的最高限速。
具体的tag分类可参看:http://wiki.openstreetmap.org/wiki/Map_Features
changeset="2628959" user="EdinburghGael" uid="170586" visible="true"
timestamp="2009-09-25T23:04:28Z">
...
简单的说:
OSM数据由以下元素组成:
节点(Nodes): 最基本的要素,是其它要素的组成部分.
路线(Ways): 有方向性的节点序列, 在编辑器里显示成连接起来的线段.
闭合路线(Closed Ways): 闭合路线是完全闭合的路线. 一般用来表示区域如公园,湖泊,岛屿等.
(三)导入OSM数据至PostgreSQL数据库
(1)创建数据库,使用pgAdmin 4,create database ,命名seattle,记得选上模板为postgis_23_sample
注意:勾选模板,要确定模板数据库不能处于连接状态
(2)为数据库创建Schema(模式)
在这之前先把PostgreSQL安装目录的bin文件夹路径以及Osmosis的bin文件夹路径添加到Path环境变量里面去,这样子就免得指令操作时要不停切换目录。
Osmosis的安装很简单,下载最新版解压即可,可查看http://wiki.openstreetmap.org/wiki/Osmosis/PostGIS_Setup
为数据库创建Schema(模式)使用命令
psql -d seattle -U postgres -W -f F:\postgres\osmosis\script\pgsimple_schema_0.6.sql
如下,则创建成功
可在pgAdmin 中看到生成了很多我们需要的表table
(四)导入OSM数据至PostgreSQL数据库
准备工作算是都做好了,现在开始导入数据了,前面已经说到下载好了OSM数据。
输入命令:
osmosis –read-xml file=F:\OSMData\SeattleWAUSA\SeattleWAUSAosm\SeattleWAUSA.osm –write-pgsimp database=”seattle” user=”postgres” password=”……” host=”localhost”
等待执行完毕
现在我们就可以在pgAdmin中查看到导入进去的数据了
至此,全部操作完成。
转载自:https://blog.csdn.net/vili_sky/article/details/78771276