解析.osm格式内容
OpenStreetMap是一款开源矢量地图,其离线数据以.osm格式保存。
OSM wiki官网:Planet OSM
osm格式介绍官网:osm xml
将osm文件以纯文本的方式打开:
1 |
|
可以看出其以xml的格式存储数据。
基本元素
元素是OpenStreetMap物理世界概念数据模型的基本组成部分。元素有三种类型:
- 节点(Node)(定义空间中的点)
- 方式(Ways)(定义线性特征和区域边界)
- 关系(Relations)(有时用于解释其他元素如何一起工作)。
以上所有内容都可以有一个或多个关联标记(描述特定元素的含义)。
Node
节点表示地球表面上由其纬度和经度定义的特定点。每个节点至少包括一个id号和一对坐标。
节点可以用来定义独立的点特征。 例如,节点可以表示公园长凳或水井。
节点也被用来定义一种方式的形状。当作为点使用时,节点通常没有标记,尽管其中一些可以。例如,公路=traffic_signals标志着道路上的交通信号,电力=塔代表着沿着电力线的塔架。
节点可以包含为关系成员。关系还可以表示成员的角色:即节点在这组特定的相关数据元素中的函数。
Ways
Ways是定义多行的2到2000个节点的有序列表。Ways被用来表示线性特征,如河流和道路。
Ways也可以代表区域的边界(固体多边形),如建筑物或森林。在这种情况下,方法的第一个节点和最后一个节点将是相同的。这就是所谓的“封闭方式”。
请注意,封闭的道路偶尔代表环路,如公路上的环形交叉路口,而不是固体区域。必须检查该方法的标记以发现它是什么。
有孔的区域,或边界超过2000个节点的区域,不能用单一的方式表示。相反,该特性将需要更复杂的多极子关系数据结构。
Relations
关系是一种多用途的数据结构,它记录两个或多个数据元素(节点、方式和/或其他关系之间的关系)。例如:
- 路线关系,它列出了形成主要(编号)公路、循环路线或公共汽车路线的方式。
- 一个转弯限制,说你不能从一条路转向另一条路。
- 一种多极子,描述有孔的区域(其边界为"外道")。
因此,关系可以有不同的含义。关系的意义由其标记来定义。通常,关系会有一个“type”标记。关系的其他标记需要根据类型标记来解释。
关系主要是节点、方式或其他关系的有序列表。这些对象被称为关系的成员。
每个元素可以选择在关系中具有一个角色。例如,转弯限制将使成员具有“from”和“to”的角色,描述被禁止的特定转弯。
单个元素,如特定的方式,可能会在关系中多次出现。
Tags
所有类型的数据元素(节点、方式和关系)以及变更集都可以有标记。标签描述它们所附加的特定元素的含义。
标签由两个自由格式的文本字段组成:“键”和“值‘。每个都是多达255个字符的Unicode字符串。 例如,公路=住宅将道路定义为一条道路,其主要功能是允许进入人们的家园。一个元素不能有两个带有相同“键”的标记,“键”必须是唯一的。例如,您不能有一个元素标记既舒适=餐厅和舒适=酒吧。
没有固定的标签字典,但在这个wiki上有许多约定(从Map Features页面开始)。标签的使用可以用Taginfo应用程序来衡量。如果有不止一种方法来标记给定的特性,那么最好使用最常见的方法。
并非所有元素都有标签。节点通常是无标签的,如果它们是方式的一部分。如果节点是关系的成员,则这两种方式和节点都可能是无标记的。
常用属性(Common Attributes)
在OSM数据库中,我们为节点、方式和关系存储这些属性。您的应用程序可能不需要使用它们,并且从OSM数据中产生的一些第三方提取可能不会全部复制它们。
Name 名称 | Value 值 | Description 描述 |
---|---|---|
id | 整形 (64-bit) | 用于识别元素。 元素类型有自己的ID空间,因此可以有id=100的节点和id=100的方式,它们不太可能相互关联或在地理上接近。\n所有现有元素都使用正(>0)值(当它们被修改或删除时将保持赋值);保留负值(<0)(其范围限于当前的更改集,从未存储在数据库中),仅在向OSM数据库发送数据以识别新对象以在其他已创建或修改的对象中创建和引用它们时使用(服务器将通过为每个创建的对象分配实际的正标识符来替换编辑应用程序发送的这些临时标识符,并将从其指定的正标识符的负标识符返回映射)。 |
user | 字符串 | 最后修改对象的用户的显示名称(仅提供信息,可能为空)。用户可以随时更改其显示名称(现有元素将反映新的用户名,而不需要任何版本更改)。 |
uid | 整形 | 上次修改对象的用户的数字标识符。 用户标识符永远不会更改。 |
timestamp | W3C标准日期和时间 | 最后一次修改的时间(例如“2016-12-31t23:59:59.999Z”)。 |
visible | true/false | 无论该对象是否在数据库中被删除,如果visible=“false”,则该对象只应通过历史调用返回。 |
version | 整形 | 对象的编辑版本。新创建的对象从版本1开始,当客户端上传对象的新版本时,该值由服务器递增。如果客户端发送的版本与数据库中对象的当前版本不匹配,服务器将拒绝对象的新版本。 |
changeset | 整形 | 创建或更新对象的变更集号(在应用程序中建议支持64位,以便与OSM数据库的长期演化兼容,但是仅查询数据而不更新数据的应用程序可能会忽略此信息属性)。 |
地图特性
内容太多,以图表为主,详见:Map Features