目录
一、OSM文件
1.1 文件简介
1.2 文件格式
1.3 主要元素
1.3.1 节点 (Node)
1.3.2 路径 (Way)
1.3.3 关系 (Relation)
1.3.4 标签 (Tags)
1.4 文件用途
二、osm文件工具
2.1 osmium
2.2 ogr2ogr
一、OSM文件
1.1 文件简介
OpenStreetMap (OSM) 文件包含了全球地图数据,这些数据由全球志愿者社区维护和更新。OSM 文件的内容和结构旨在描述地理信息,例如道路、建筑物、水体、绿地等。
1.2 文件格式
OSM 文件主要有两种格式:
- XML 格式:扩展名为
.osm
,使用 XML 语法描述地理数据。 - PBF 格式:扩展名为
.osm.pbf
,是一种二进制格式,具有更高的压缩效率和读取速度。
1.3 主要元素
1.3.1 节点 (Node)
<node id="123" lat="52.51631" lon="13.37777">
<tag k="amenity" v="restaurant"/>
<tag k="name" v="Example Restaurant"/>
</node>
描述地图上的一个点。
每个节点包含一个唯一的 ID 和经纬度坐标(纬度和经度)。
节点还可以有一些标签(key-value 键值对),用于描述该点的属性(例如,名称、高度、类型等)。
1.3.2 路径 (Way)
<way id="456"> <nd ref="123"/>
<nd ref="124"/>
<nd ref="125"/>
<tag k="highway" v="residential"/>
<tag k="name" v="Example Street"/>
</way>
由一系列节点组成的有序列表,表示线条(如道路、河流)或多边形(如建筑物、湖泊)。
路径也有一个唯一的 ID,并可以有标签来描述其属性。
1.3.3 关系 (Relation)
用于描述复杂的地理结构,如多边形关系(例如,多边形的内外环)、路线、边界等。
关系包含其他节点、路径或其他关系的引用,并定义它们在关系中的角色(如外环、内环)。
<relation id="789">
<member type="way" ref="456" role="outer"/>
<member type="way" ref="457" role="inner"/>
<tag k="type" v="multipolygon"/>
<tag k="landuse" v="forest"/>
</relation>
1.3.4 标签 (Tags)
标签是 OSM 文件的核心部分,用于描述地理对象的属性。每个标签由一个键(key)和值(value)组成,例如:
-
amenity=restaurant
:表示一个餐馆。 -
highway=residential
:表示一条住宅道路。 -
name=Example Street
:表示对象的名称。
1.4 文件用途
- 导航和地理定位:如 OsmAnd、Mapbox 和 MapQuest 等应用和服务。
- 地理信息系统 (GIS):用于空间分析和地理研究。
- 城市规划和管理:帮助城市规划人员和地方政府了解和管理基础设施。
- 应急响应:用于灾害管理和人道主义救援。
二、osm文件工具
2.1 osmium
osmium是一个命令行工具,用于检查osm文件的完整性。
可以适用以下命令进行安装:
# Ubuntu/Debian
sudo apt-get install osmium-tool
# macOS
brew install osmium-tool
使用以下命令进行检查:
osmium check-refs input.osm
2.2 ogr2ogr
GDAL (Geospatial Data Abstraction Library) 工具集的一部分,主要用于在不同的地理数据格式之间进行转换。
安装命令:
# Ubuntu/Debian
sudo apt-get install gdal-bin
# macOS
brew install gdal
基本用法命令如下:
ogr2ogr -f "OutputFormat" outputfile inputfile
OutputFormat:输出文件格式
outputfile:输出文件路径(转换后的文件存储路径)
inputfile:输入文件路径(要转换的文件路径)
例:将osm文件转换为kml格式需运行
ogr2ogr -f "KML" output.kml input.osm
若要单独提取points(点)或lines(线)或multipolygons(面)元素,可使用以下命令:
ogr2ogr -f "KML" output_nodes.kml input.osm points
ogr2ogr -f "KML" output_lines.kml input.osm lines
ogr2ogr -f "KML" output_polygons.kml input.osm multipolygons