跳至主要內容

OpenStreetMap开放街道地图(OSM)介绍

程序员李某某大约 5 分钟

OpenStreetMap开放街道地图(OSM)介绍

概述

OpenStreetMap开放街道地图( OSM)

  • 是一个开源社区维护的详细的地图数据

  • 是自由网上地图构建协作计划

  • 目标是创造一个内容自由且能让所有人编辑的世界地图,并且让一般的移动设备有方便的导航方案。

  • 其OSM数据开源,可以自由下载使用,免费的全球地图数据库。

  • 官网:https://www.openstreetmap.org/open in new window

  • 地理要素包括道路、建筑、河流、森林、山脉、公共设施等

  • 地物的覆盖范围可能各不相同,包括地理位置、地名、地标、兴趣点、水文特征和土地利用/土地覆盖。

  • openstreetmap.org也会收录地图注记与GPS轨迹的资料,地图注记供不熟悉编辑的用户回报地图的错误或过时信息等问题,GPS轨迹则提供实地勘查者提供轨迹供地图绘制用。

  • 地图图层则是依照其原始资料,由不同的读取引擎绘制成不同样式的地图影像,又称为图砖。

数据结构

  • OSM数据以XML格式存储,包括空间数据、属性数据
  • 空间数据包括:点(Nodes)、路(Ways)和关系(Relations),这三种原始构成了整个地图画面
    • Nodes定义了空间中点的位置
    • Ways定义了线或区域
    • Relations(可选的)定义了元素间的关系
  • 属性数据Tags用于描述矢量数据基元。

OSM使用的资料格式是地形数据结构,使用拓扑类型的数据结构,当中由四个核心的元素(也称为原始资料)。

  • 节点-node:存储经纬度,表示位置,但不存储节点在地图上的实际大小,比如说一个景点或者山峰,或一间商店或餐厅,或是做为路径的一部分。节点可依附于路径与关系。

  • 路径-way:有序排列的节点,以折线的形式呈现,也能循环回起始节点形成封闭路径,可以循环路径或以多边形区域的方式呈现。这类原始资料可用于呈为线性资料,例如街道、河流等,或一个多边形区域,例如农田、公园、停车场、建筑物、校园或者是湖泊、森林。路径必须有节点才能显示于地图上,可依附于关系,路径资料可计算出长度、或多边形的面积、周长。way可表示3种图形事物(非闭合线(Open polyline)、闭合线(Closed polyline)、区域(Area))。

  • 关系-relation:有排序的节点、路径和关系(三类原始资料在这里统称“成员”),在这里每个成员选择性拥有一个"角色"(字符串),以决定该成员于此关系中的性质。关系是用来表示各个原始资料(节点、路径和关系)的关系,例如道路的转弯限制,由不同路径所组成的边界,一条国道、省道或铁路路线,或者一个区域中中间空缺区域(例如被环形建筑物包围的中庭,或水体中的小岛)的多重多边形,这时"角色"字符串就能用来形容它们之间的关系。

  • k=v标签-tag:键值对(key-value pairs,键值都是字符串),用来存储地图上对象的元数据(对象的类型,名字和物理特性),赋予OSM资料其意义,而能表示现实世界中存在的某件事物,与有关其事物的信息。标签无法独立存在,它们必须依附在一个已存在的对象,也就是节点,路径或关系。地图中对象映射的关系(本体)和标签在OSM的wiki上有比较详细的介绍,用法为键=值;key=value。一个原始资料称为一个对象,每个对象的同一个键,只能设置一个值。例如建筑物是building=yes,至于住宅区街道,则为highway=residential,这是OSM中最频繁被使用的标签。

    • highway=residential来定义居住区道路
    • maxspeed:winter=*就表示冬天的最高限速

.osm其实就是xml

<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="osmium/1.14.0">
  <bounds minlat="38.45043" minlon="-75.78974" maxlat="40.03221" maxlon="-74.96121"/>
  <node id="75390099" version="11" timestamp="2023-01-22T00:03:05Z" lat="39.7221284" lon="-75.7886029">
    <tag k="description" v="Lat-Long (NAD27) N39°43&apos;26.3&quot; W75°47&apos;19.9&quot; UTM (NAD27) 18S 432415 4397212 UTM (WGS84) 18S 432391 4397420"/>
    <tag k="man_made" v="survey_point"/>
    <tag k="name" v="Tri-State Marker"/>
  </node>
 <way id="11749873" version="4" timestamp="2012-09-21T05:23:27Z">
     <nd ref="105203702"/>
     <nd ref="105203705"/>
     <tag k="highway" v="track"/>
 </way>
 <relation id="117172" version="5" timestamp="2020-06-19T22:26:18Z">
     <member type="way" ref="33502448" role="outer"/>
     <member type="node" ref="157622606" role="admin_centre"/>
     <tag k="name" v="Townsend"/>
     <tag k="type" v="boundary"/>
     <tag k="boundary" v="administrative"/>
     <tag k="wikidata" v="Q755689"/>
     <tag k="wikipedia" v="en:Townsend, Delaware"/>
     <tag k="admin_level" v="8"/>
     <tag k="border_type" v="town"/>
  </relation>
</osm>

下载

导出

https://www.openstreetmap.org/open in new window

导出结果为osm文件

pbf合并

下载 osmium windows下:https://github.com/pango3001/Osmium_1_14open in new window

Linux 我是用 homebrew 安装的,yum源找不到

osmium merge  file1 file2 --overwrite -o output_file

参考 https://geekdaxue.co/read/u27809381@xz9182/lkk642open in new window 交通可达性计算-Graphhopper地图算时间 https://pan.baidu.com/s/1OwNw4yS250DxR3768ogF1A?pwd=6666#list/path=%2Fopen in new window

上次编辑于:
贡献者: 李元昊