osm数据导入mysql_导入OSM数据至PostgreSQL数据库

本文介绍了如何将OpenStreetMap(OSM)数据导入到PostgreSQL数据库。首先讲解了OSM的基本数据结构,包括节点、路线和闭合路线。接着详细阐述了导入数据的步骤,包括创建数据库、设置Schema以及使用osmosis工具执行导入操作。最终,在PostgreSQL中成功查看到导入的数据。
摘要由CSDN通过智能技术生成

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

SouthEast

注意:勾选模板,要确定模板数据库不能处于连接状态

(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

如下,则创建成功

SouthEast

可在pgAdmin 中看到生成了很多我们需要的表table

SouthEast

(四)导入OSM数据至PostgreSQL数据库

准备工作算是都做好了,现在开始导入数据了,前面已经说到下载好了OSM数据。

输入命令:

osmosis –read-xml file=F:\OSMData\SeattleWAUSA\SeattleWAUSAosm\SeattleWAUSA.osm –write-pgsimp database=”seattle” user=”postgres” password=”……” host=”localhost”

SouthEast

等待执行完毕

SouthEast

现在我们就可以在pgAdmin中查看到导入进去的数据了

SouthEast

至此,全部操作完成。

转载自:https://blog.csdn.net/vili_sky/article/details/78771276

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值