Godot 城市模拟 – 005 OpenStreetMap 介绍:数据结构与详细示例

file

什么是 OpenStreetMap?

OpenStreetMap(简称 OSM)是一个开源、协作的全球地图项目,旨在创建一个由志愿者共同编辑和维护的免费地理数据库。与商业地图服务(如 Google Maps)不同,OSM 的数据开放给所有人使用、修改和分发,遵循开放数据许可证(如 ODbL)。OSM 的核心在于其社区驱动的方式:用户通过 GPS 设备、航空影像或本地知识收集数据,并上传到中央数据库。这些数据可用于制作地图、导航应用、地理分析等。

OSM 的数据以简单的、基于 XML 的格式存储,主要围绕三种基本对象:节点(Node)路径(Way)关系(Relation),并通过标签(Tag) 添加属性。这种结构使得 OSM 数据轻量、灵活且易于扩展。下面,我们将逐步深入探讨 OSM 的数据结构,并通过一个详细示例来理解其工作原理。

OSM 数据结构概述

OSM 数据模型基于以下核心元素:

  • 节点(Node):代表地图上的一个点,用经纬度坐标定义。例如,一个路灯或建筑物角落。
  • 路径(Way):由有序的节点序列组成的线或面。例如,一条道路(线)或一个公园边界(面)。
  • 关系(Relation):用于分组或关联多个对象(节点、路径或其他关系)。例如,一个公交路线(包含多个路径)或一个行政边界。
  • 标签(Tag):键值对(key-value pairs),附加到节点、路径或关系上,用于描述属性(如名称、类型等)。

所有元素都有通用属性,如 id(唯一标识符)、version(编辑版本)、timestamp(最后修改时间)和 changeset(关联的修改集)。数据通常以 XML 或 PBF(Protocolbuffer Binary Format)格式存储。接下来,我们通过一个示例来一步步解析 OSM 数据结构。

一步一步了解 OpenStreetMap 示例

以下是一个典型的 OSM XML 数据片段,包含了一个边界定义、一个节点、一个路径和一个关系。我们将逐部分拆解,并解释每个元素的作用。示例基于用户提供的真实数据,但已简化以确保清晰性。

<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="osmium/1.14.0">
  <!-- 示例数据将在这里展开 -->
</osm>

步骤 1: 理解整体结构

  • 根元素 <osm> 表示 OSM 数据文档,属性 version="0.6" 指定 OSM API 版本,generator 说明生成工具(如 Osmium)。
  • 数据包含在 <osm> 内,包括 <bounds><node><way><relation> 子元素。

步骤 2: 边界定义(Bounds)

边界元素定义了数据的经纬度范围,用于优化地图渲染或查询。

<bounds minlat="38.45043" minlon="-75.78974" maxlat="40.03221" maxlon="-74.96121"/>
  • 解释:这个边界框覆盖了美国特拉华州附近区域,最小纬度 38.45043、最小经度 -75.78974,最大纬度 40.03221、最大经度 -74.96121。它帮助应用程序快速定位数据,但不是必须的。

步骤 3: 节点(Node)

节点是 OSM 的基本点元素。以下示例表示一个测量点(survey point)。

<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'26.3" W75°47'19.9" UTM (NAD27) 18S 432415 4397212 UTM (WGS84) 18S 432391 4397420"/>
  <tag k="man_made" v="survey_point"/>
  <tag k="name" v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小武的开发空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值