Skip to content

1.pg数据库安装扩展

  • 执行 create extension postgis; 命令,安装postgis 扩展
  • 执行 create extension hstore; 命令,安装hstore 扩展;若失败,可先通过 yum install postgresql-contrib 安装 postgresql-contrib,再安装hstore

2.安装osmosis

  • 访问Releases · openstreetmap/osmosis (github.com),下载安装包
  • 下载完成后,访问 osmosis-0.48.3\script 目录,对pg数据库执行 pgsnapshot_schema_0.6.sql 脚本,该脚本主要创建osm数据存储所需要的表,执行 pgsnapshot_schema_0.6.sql 脚本后,会生成如下7个表

数据表

3.利用osmosis操作数据库和osm文件数据

  • 导入osm数据到pg数据库

执行如下命令

osmosis --read-xml C:\Users\Admin\Desktop\test.osm --write-pgsql host="192.168.77.200:36001" database="test" user="test" password="test"
  • 从pg数据库导出osm文件

执行如下命令

osmosis --read-pgsql host="192.168.77.200:36001" database="test" user="test"  password="test" --dataset-bounding-box-0.6 left="114.4923"  top="30.5265"  right="114.5661"  bottom="30.4963" --write-xml C:\Users\Admin\Desktop\out.osm

4.OSM相关的一些概念

地图数据的存储方式是xml结构,后缀名可以是xml或osm。

地图的数据结构,即地图要素包括Node、 Way、 Relation、Tag、Common attributes

这些地图要素,与普通的地图或导航要素概念相同

  • Node是空间点,包括经纬坐标,或高度信息。其他一些可选信息,如name等,在tag子数据中表示。类似于shape point 或attribution point

  • way表示线或区域,能包含2-2000个node点信息。它道路与区域描述的主要形式。类似于link、edge的概念

  • relation表示不同的元素间的关系,将不同元素间的关系描述出来。类似于connection的概念

  • tag表示一个元素中包含的一个特征,或者说是包含的一小块数据,如highway=residential,住宅区内的道路。类似于attribution的概念,不过tag的作用远不止attribution的描述。

  • Common attributes就是node、way、relation的共同属性,包括id, usr, version, timestamp等meta的信息。

Elements - OpenStreetMap Wiki

在OSM数据库中,我们为节点,路径,关联储存了这些属性,你的应用程序不一定需要全部使用,一些提取OSM数据的第三方软件也不一定给予全部的重现。

属性名数据类型描述
id整型(64位)用来识别元素。每种元素类型有独立的ID空间,所以可能同时有节点和路径拥有相同的ID,但是他们之间不太可能有逻辑上或是物理上的联系。
user字符串最后修改元素的用户的显示名(仅供参考,可能为空)。用户可以随时更改其显示名(现有元素将反映新用户名,而无需更改任何版本)。
uid整型用来显示最后更改的用户的用户ID,用户ID是固定值。
timestampW3C标准日期与时间格式最后修改时间(例如「2016-12-31T23:59:59.999Z」)。
visible"true" "false"用来标记元素是否被数据库删除, 如果 visible="false" 那么这个元素仅应该被历史记录所返回。
version整型元素的编辑版本。新创建的元素从版本1开始,当客户端上传元素的新版本时,该值由服务器递增。如果客户端发送的版本与数据库中元素的当前版本不匹配,服务器将拒绝元素的新版本。
changeset整型在其中创建或更新元素的变更集编号(建议在应用程序中支持 64 位以与 OSM 数据库的长期演变兼容,但仅查询数据而不更新它们的应用程序可能会忽略此信息属性)。