OpenStreetMap实战

介绍

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组合而成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单点登录二:登录过程使用摘要算法和加盐的意义以及demo练习

上一篇《springboot项目使用redis、springSecurity、jwt实现单点登录》写了关于单点登录的架子&#xff0c;但是没有实现密码验证的细节。这里使用盐和摘要算法来实现一个密码验证的完整过程demo。 1、依赖没变&#xff0c;还是上一篇内容那些 <dependencies><depen…

接口测试简介以及接口测试用例设计思路

接口测试简介 1.什么是接口 接口就是内部模块对模块&#xff0c;外部系统对其他服务提供的一种可调用或者连接的能力的标准&#xff0c;就好比usb接口&#xff0c;他是系统向外接提供的一种用于物理数据传输的一个接口&#xff0c;当然仅仅是一个接口是不能进行传输的&#x…

多层感知机学习XOR实例

多层感知机学习XOR实例 多层感知机介绍使用多层感知机学习XOR实例传统统计数学方法&#xff08;传统机器学习&#xff09;使用多层感知机学习XOR 总结 多层感知机介绍 多层感知机&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;&#xff0c;又称为深度前馈网络…

JAVA并发编程之锁应用

Java并发包是Java中提供的一个用于支持多线程编程的工具包。Java并发包提供了多种机制来控制线程的执行&#xff0c;保证线程的安全性和可靠性。下面我们将介绍Java并发包的使用方法&#xff0c;并给出示例。 synchronized public class SynchronizedDemo { ​private int v;…

自学网络安全,一般人我劝你还是算了吧

学前感言: 我为什么会这样说&#xff0c;要一般人自学网络安全就算了&#xff0c;因为我不是一般人 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发 .3.有时多 google,baidu,我们往往都…

termux-x11教程

小粉丝已经求稿两个星期了&#xff0c;不写是不行了。 termux-x11 是Termux的一个图形化项目&#xff0c;官方是这么介绍的。 A Termux add-on app providing Android frontend for Xwayland.安装工具 我们需要在Termux和安卓系统上安装工具以成功的运行程序。 x11-repo&am…

使用canvas给图片添加水印

上接文章“图片处理” canvas元素其实就是一个画布&#xff0c;我们可以很方便地绘制一些文字、线条、图形等&#xff0c;它也可以将一个img标签里渲染的图片画在画布上。 我们在上传文件到后端的时候&#xff0c;使用input标签读取用户本地文件后得到的其实是一个Blob对象&a…

HNU-电路与电子学-小班3

第三次讨论 1 、直接用晶体管而不是逻辑门实现异或门&#xff0c;并解释这个电路是如何工作的。 &#xff08;6个 MOS 管构成&#xff09; 2 、通信双方约定采用 7 位海明码进行数据传输。请为发送方设计海明码校验位 生成电路&#xff0c;采用功能块和逻辑门为接收方设计海…

ISO_IEC_7816-3

介绍 ISO/IEC 7816 是一系列标准&#xff0c;规定了集成电路卡和此类卡的使用 互换。 这些卡是用于在外部世界和卡中的集成电路之间协商的信息交换的识别卡。 作为信息交换的结果&#xff0c;卡传递信息&#xff08;计算结果、存储的数据&#xff09;和/或修改其内容&#xff0…

路径规划算法:基于果蝇优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于果蝇优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于果蝇优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法果蝇…

2023全国酒店数据

数据内容字段结构 hotel_id int(11) NOT NULL, name varchar(100) DEFAULT NULL, name_en varchar(100) DEFAULT NULL, short_name varchar(100) DEFAULT NULL, province varchar(20) DEFAULT NULL, city_id int(11) DEFAULT NULL, city varchar(20…

Android12之源码手动生成aidl对应java/cpp/ndk/rust服务(一百五十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

博客系统(ssm版本)

在前面的文章中给大家介绍过博客系统的servlet版本&#xff0c;但是servlet的技术非常的老旧&#xff0c;我们在企业中用的都是springboot相关的框架&#xff0c;本章内容就是讲述如何一步一步的利用ssm的技术来实现博客系统。 目录 前期配置 创建数据库 配置文件 公共文件…

【JavaSE】Java基础语法(五):数组详解

文章目录 &#x1f378;1.1 数组介绍&#x1f378;1.2 数组的动态初始化1.2.1 什么是动态初始化1.2.2 动态初始化格式&#x1f378;1.3 数组元素访问1.3.1 什么是索引1.3.2 访问数组元素格式1.3.3 示例代码 &#x1f378;1.4 内存分配1.4.1 内存概述1.4.2 java中的内存分配 &am…

【Java-10】深入浅出线程安全、死锁、状态、通讯、线程池

主要内容 线程安全线程死锁线程的状态线程间通讯线程池 1 线程安全 1.1 线程安全产生的原因 多个线程在对共享数据进行读改写的时候&#xff0c;可能导致的数据错乱就是线程的安全问题了 问题出现的原因 : 多个线程在对共享数据进行读改写的时候&#xff0c;可能导致的数据…

第五十天学习记录:C语言进阶:位段

位段 什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1、位段的成员可以是int,unsigned int或signed int。 2、位段的成员名后边有一个冒号和一个数字。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>//位段-二进制位 struct A {int …

GoWeb -- gin框架的入门和使用(2)

前言 书接上回&#xff0c;在gin的框架使用中&#xff0c;还有着许多方法以及它们的作用&#xff0c;本篇博客将会接着上次的内容继续记录本人在学习gin框架时的思路和笔记。 如果还没有看过上篇博客的可以点此跳转。 map参数 请求url&#xff1a; http://localhost:8080/us…

什么是IPAM?如何使用IPAM来管理IP地址和DHCP?

在计算机网络中&#xff0c;IPAM&#xff08;IP Address Management&#xff09;是一种用于管理IP地址和DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;的工具或系统。IPAM旨在简化和集中管理IP地址分配、子网划分和DHCP配置等任务。本文将详细介绍IPAM的概…

奇偶分频电路

目录 偶数分频 寄存器级联法 计数器法 奇数分频 不满足50%占空比 50%占空比 偶数分频 寄存器级联法 寄存器级联法能实现2^N的偶数分频&#xff0c;具体做法是采用寄存器结构的电路&#xff0c;每当时钟上升沿到来的时候对输出结果进行翻转&#xff0c;以此来实现偶数分…

chatgpt赋能python:Python中日期转换:从字符串到日期对象

Python中日期转换&#xff1a;从字符串到日期对象 作为一个经验丰富的Python工程师&#xff0c;日期转换在我的日常编码工作中经常遇到。Python提供了一些内置函数和模块&#xff0c;可以将字符串转换为日期对象或将日期对象格式化为特定的字符串。本篇文章将带您深入了解Pyth…