OpenStreetMap实战

news2025/1/10 3:19:01

介绍

OpenStreetMap(OSM)是一个由志愿者创建并维护的免费和开源的地图数据库。其目的是为全球任何人提供可自由使用、编辑和分发的地图数据。OpenStreetMap数据库中的地理要素包括道路、建筑、河流、森林、山脉、公共设施等。由于OpenStreetMap是开放的平台,任何人都可以添加新的地理信息,从而使其不断发展和更新。OpenStreetMap已经成为诸如Google地图等商业地图的一个重要替代品。

疫情这三年来,OpenStreetMap上的用户和上传的数据又是爆炸式的增长,有越来越多有用的信息可以供大家使用和挖掘。

我们可以看下OpenStreetMap的数据统计报告,具体链接可以查看https://wiki.openstreetmap.org/wiki/Stats?spm=a2c6h.12873639.article-detail.6.3c354ac5SIXVmR#Registered_users_statistics_reports,我分别贴了两张图,一张图是注册用户数增长曲线,一张图是录入的数据增长曲线,足以看得出来越来越多的数据在加入其中。

数据结构

OSM uses a topological data structure with four core elements.

上面翻译过来就是:osm使用拓扑类型的数据结构,基于四种核心的元素。

1. Nodes: 点,带有经纬度的信息。Nodes are points with a geographic position, stored as coordinates(pairs of a latitude and a longitude).

2. Ways: 路径,由一系列有顺序的Nodes列表组成,表现形式可以为折线或者封闭的多边形。Ways are ordered lists of nodes, representing a polyline, or possibly a polygon if they form a closed loop.

3. Relations: 关系,由Nodes, Ways,其他Relations组合而成的。 Relations are ordered lists of nodes, ways and relations(together called “member”.

4. Tags: 一个键值对。Tags are key-value pairs

数据格式

我们现在就去down一份数据下来看看具体的数据格式是什么样子的。osm的数据有很多源可以去下载,我选择了下面的源

Geofabrik Download Server  这个网站上定期更新的洲、 国家和特定城市数据库,格式包括OSM XML、OSM PBF、ESRI Shape文件等

选择美国一个州的数据来下载,如下图,这个网站比较好的地方就是可以在选择某个州可以预览大概的区域范围(图中两个箭头标注)

随便找一个.bz2的小文件下载下来即可,(pbf文件类型具体的格式可以暂时不用深入了解,只把它当做是压缩率更好的xml文件即可)

我们将下载下来的bz2文件解压缩,就可以得到.osm尾缀的文件,如下图

使用文本编辑器打开.osm文件,就可以看到具体的内容

我们使用下面这段范例来解释下各种数据类型

<?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>

line1:OSM的原始数据保存在xml格式的文件中,所以第一行声明的即为xml格式的数据

line2:OSM定义,所有的数据都是包含在<OSM></OSM>标签内

line3:声明这份OSM的数据所包含的地图区域范围

line4:nodes类型的节点,带有经纬度坐标的信息,nodes相关的数据都包含在<node></node>标签内,此标签内含有多个tag的数据,tag中包含了这个点的名字和描述等信息

line9:ways类型的节点,ways相关的数据都包含在<way></way>标签内,此标签内包含了两个nodes类型的节点,此标签内包含了一个tag,用来标识这是一条铁路

line14:relations类型的节点,成员包含nodes和ways类型的数据,同时有多个标签的数据

总结起来,osm原始数据就是由node/way/relation/tag组合而成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/564839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构初阶 —— 二叉树链式结构

目录 一&#xff0c;二叉树链式结构 二&#xff0c;二叉树的遍历&#xff08;四种&#xff09; 前序遍历 中序遍历 后序遍历 层序遍历 三&#xff0c;二叉树接口 四&#xff0c;试题 一&#xff0c;二叉树链式结构 普通二叉树的增删查改&#xff0c;意义不大&#xff1b…

JavaScript基础扫盲

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本篇文章为大家带来JavaScript的学习&#xff0c;一图胜千言~~~ 目录 文章目录 1.1 JavaScript (简称 JS) 1.2 JavaScript发展历史 1.3 JavaScript运行过程 二、JavaScript的基础语法 2.1 …

Linux内核源码分析-进程调度(五)-组调度

出现的背景 总结来说是希望不同分组的任务在高负载下能分配可控比例的CPU资源。为什么会有这个需求呢&#xff0c;假设多用户计算机系统每个用户的所有任务划分到一个分组中&#xff0c;A用户90个任务&#xff0c;而B用户只有10个任务&#xff08;这100个任务假设都是优先级一…

物联网手势控制小车所遇问题与解决方案

LCD1602无法显示问题 问题描述&#xff1a;按照开源社区教程完成LCD1602驱动显示程序的编写&#xff0c;成功点亮屏幕&#xff0c;开启背光&#xff0c;但无法观察到显示数据。 分析过程与解决方案&#xff1a; 1.是否IIC地址不对 使用以下代码扫描IIC总线上的设备&#xf…

Go学习圣经:队列削峰+批量写入 超高并发原理和实操

说在前面&#xff1a; 本文是《Go学习圣经》 的第二部分。 第一部分请参见&#xff1a;Go学习圣经&#xff1a;0基础精通GO开发与高并发架构&#xff08;1&#xff09; 现在拿到offer超级难&#xff0c;甚至连面试电话&#xff0c;一个都搞不到。 尼恩的技术社群中&#xf…

K近邻算法实现红酒数据集分类

目录 1. 作者介绍2. K近邻算法介绍2.1 K基本原理2.2 算法优缺点 3. KNN红酒数据集分类实验3.1 获取红酒数据集3.2 KNN算法3.3 完整代码 4. 问题分析参考链接&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 路治东&#xff0c;男&#xff0c;西安工程大学电子信…

面试问题汇总

最近面试了几家公司&#xff0c;对问到的问题汇总一下。 Unity 是左手坐标系还是右手坐标系? 这个题靠记忆答的答错了&#xff0c;是左手坐标系。 大拇指指的方向是X轴&#xff0c;食指指的方向是Y轴方向&#xff0c;中指指的方向Z轴方向。 场景中游戏物体Activity为false,G…

C语言字符串函数和内存函数的介绍与模拟实现

0.前言 C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数. 1.字符串函数介绍与模拟实现 C语言本身就带有一些库函数&#xff0c;所…

研发工程师玩转Kubernetes——CPU配额

在一个Pod中&#xff0c;可以有多个容器&#xff0c;比如一个主要业务容器和若干辅助业务容器。如果辅助业务容器内程序有问题&#xff0c;导致占用了大量的CPU资源&#xff0c;进而影响了主要业务容器的执行效率&#xff0c;那就需要进行干涉了。本节我们将使用“资源配额”来…

Edgedetect

边缘检测&#xff0c;检测上升沿 对于 8 位矢量中的每个位&#xff0c;检测输入信号何时从一个时钟周期中的 0 变为下一个时钟周期的 1&#xff08;类似于正边沿检测&#xff09;。输出位应在发生 0 到 1 转换后设置周期。 以下是一些示例。为清楚起见&#xff0c;in[1] 和 pe…

Jenkins+GitLab+Docker搭建前端自动化构建镜像容器部署(无本地证书,映射版本)

前言 &#x1f680; 需提前安装环境及知识点&#xff1a; 1、Docker搭建及基础操作 2、DockerFile文件描述 3、Jenkins搭建及基础点 &#x1f680; 目的&#xff1a; 将我们的前端项目打包成一个镜像容器并自动发布部署&#xff0c;可供随时pull访问 一、手动部署镜像及容器 1…

【Linux】线程分离 | 线程库 | C++调用线程 | 线程局部存储

文章目录 1. 线程分离1. 为什么要线程分离&#xff1f;2. 具体使用3. 为什么有时候分离在调用join 会正常运行&#xff1f; 2. 如何理解线程库&#xff1f;如何理解 先描述 在组织&#xff1f; 3. C中使用多线程4. 线程局部存储局部变量全局变量 1. 线程分离 1. 为什么要线程分…

服务器虚拟化部署

服务器虚拟化部署 1、背景2、目的3、环境4、部署4.1、部署VMware ESXi4.1.1、准备工作4.1.2、部署ESXi4.1.3、配置ESXi4.1.4 、部署虚拟机 1、背景 项目上利旧9台服务器&#xff0c;项目需要使用15台服务器&#xff0c;外购已经没有项目硬件采购预算&#xff0c;只能从目前的…

自定义HikariCP连接池

文章目录 一、简介1、概述2、地址 二、配置参数1、Hikari原生参数2、Springboot中参数 三、springboot中使用四、自定义数据源1、各模块2、完整代码3、多数据源 五、多数据源dynamic中使用1、简介2、引入依赖3、参数配置 六、XMind整理 一、简介 1、概述 官方解释&#xff1a…

zabbix 自动发现与自动注册、部署 zabbix 代理服务器及部署 Zabbix 高可用集群

目录 一、zabbix 自动发现二、zabbix 自动注册&#xff08;对于 agent2 是主动模式&#xff09;三、部署 zabbix 代理服务器四、部署 Zabbix 高可用集群五、Zabbix 监控 Windows 系统六、Zabbix 监控 java 应用七、Zabbix 监控 SNMP 一、zabbix 自动发现 zabbix 自动发现&…

Nautilus Chain开启全球行,普及Layer3概念加速其采用

在去年&#xff0c;在 2022 年&#xff0c;Vitalik 进一步提出了 Layer3 的概念与早期形态&#xff0c;期盼弥补目前链体系存在的不足&#xff0c;并为 Layer3 提出了三大目标&#xff0c;即Layer2 用于扩展&#xff0c;Layer3 用于定制功能&#xff0c;如隐私&#xff1b;Laye…

【C++】哈希表特性总结及unordered_map和unordered_set的模拟实现

✍作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;C 文章目录 前言一、哈希表的特性 - 哈希函数和哈希冲突1 哈希函数2. 哈希冲突 二、闭散列的实现 -- 开放地址法1. 定义数据结构2.insert()3.Find()4. Erase()5.仿函数处理key值不能取模无法映射 --- BKDRHash 三、开…

【Linux系列P4】Linux需要什么?编辑器?软件包?一文帮你了解掌握 [yum][vim]———基础开发工具篇

前言 大家好&#xff0c;这里是YY的Linux系列part4&#xff1b;本章主要内容面向接触过Linux的老铁&#xff0c;主要内容含【学习yum工具&#xff0c;进行软件安装】【拓展yum源安装】【掌握vim编辑器使用&#xff0c;基本命令】【命令集】【懒人配置文件安装教程】 在下一章节…

Java高并发编程—可见性与有序性原理

原子性、可见性和有序性是并发编程所面临的三大问题。 Java通过CAS操作已解决了并发编程中的原子性问题&#xff0c;本章为大家介绍Java如何解决剩余的另外两个问题——可见性和有序性。 CPU物理缓存结构 由于CPU的运算速度比主存&#xff08;物理内存&#xff09;的存取速度…

Android系统原理性问题分析 - 多路并发情况下的C/S模型

声明 在Android系统中经常会遇到一些系统原理性的问题&#xff0c;在此专栏中集中来讨论下。Android系统中很多地方都采用了I/O多路复用的机制&#xff0c;为了引出I/O多路复用机制&#xff0c;先来分析多路并发情况下的C/S模型。此篇参考一些博客和书籍&#xff0c;代码基于A…