基于 OSM 构建全球瓦片地图(一):概述

article/2025/7/22 2:11:14

一、什么是OSM

开放街道地图(英语:OpenStreetMap,缩写为OSM),其概念启发自维基百科网站,是一个建构自由内容之网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。

从2007年项目启动至今(2019年),OSM的数据贡献者已超过5.5+百万个,每天的活跃的贡献者有5千个,并且仍在持续的上升。在这10多年来,OSM的贡献者已经完成了超过7千万次的数据编辑,累计数据量达到46G(pbf格式)。

以上数据来源:OSMstats、Planet OSM

在当今的互联网中,地图应用无所不在。在过去没有OSM或者OSM还不足够成熟的时候,企业和机构只能选择海外的Google地图或者国内的百度地图及高德地图来满足自身的地图应用需求。随着OSM的出现和成熟,OSM已成为他们的一个新选择。

二、数据 vs 地图

虽然OSM提供了海量的地图数据,但是人们在地图应用需求上真正需要的是一个简单易用的地图服务,而不是未经处理的原始数据。要做到基于原始数据来提供高性能的瓦片地图服务,首先需要将全球的OSM数据生成瓦片地图,然后结合地图服务器才能提供高性能、高可用的地图服务。当中涉及大量的复杂的知识和开发工作,对于很多起来说,他们更希望能够重点关注自身业务本身,而不是非重点的地图服务。

正是如此,OSM的生态诞生了两个公司:

  • MapBox:基于OSM数据为用户提供简单易用、高性能、高可用的SaaS地图服务,且价格实惠,支持自定义地图风格。
  • OpenMapTiles:基于OSM数据生成现成的瓦片地图(非服务)和与MapBox的产品类似的SaaS服务。

MapBox和OpenMapTiles基本解决了易用、实惠且高性能的地图服务的需求,他们提供的地图都是以满足通用的、主流的应用场景为主。因此,面对一些非通用、定制化程度高的地图应用场景时,企业不得不考虑生成属于自己的定制化地图。

三、瓦片地图制作流程

瓦片地图的制作流程可大致分为几个环节(如下图),分别是:

  1. 按照地图需要呈现的信息的要求定义Schema;
  2. 按照Schema将OSM数据导入数据库;
  3. 动态/预生成瓦片地图;
  4. 打包预生成的瓦片地图;
  5. 定期增量更新地图;

《基于 OSM 构建全球瓦片地图》系列的文章会围绕着此流程进行开展讨论,详细介绍每一个环节中的理论知识以及工具使用说明。希望阅读完此系列的文章后,读者们能够拥有如下的收获:

  1. 明白瓦片地图的制作原理;
  2. 知道如何定制一个地图的Schema;
  3. 高效的生成全球的瓦片地图。

敬请留意下一篇文章《基于 OSM 构建全球瓦片地图(二):如何定义一个地图Schema》。

如果喜欢我的文章,欢迎关注我的个人网站。

(完)

参考资料

  1. OSM维基百科
  2. OSMstats
  3. Planet OSM

http://chatgpt.dhexx.cn/article/ANAtIsFF.shtml

相关文章

Python实现OSM地图数据解析——OSM2GMNS

目录 1. 开源地图OSM2. 数据解析方法对比3. OSM2GMNS3.1 关于GMNS数据格式3.2 安装方法3.3 使用方法3.3.1 地图数据下载3.3.2 数据解析 3.4 输出文件 4. 可视化5. 总结参考 1. 开源地图OSM OpenStreetMap(www.openstreetmap.org)是一款知名的开源地图数…

利用微信网页录音接口实现语音搜索

微信网页接口有3个录音相关接口 开始录音接口 wx.startRecord();停止录音接口 wx.stopRecord({ success: function (res) { var localId res.localId; } });监听录音自动停止接口 wx.onVoiceRecordEnd({ // 录音时间超过一分钟没有停止的时候会执行 complete 回调 complete…

Unity WebGL基于js通信实现网页录音

Unity WebGL基于js通信实现网页录音 由于Unity发布WebGL后无法使用Unity中的Microphone,所以无法进行录音,只能借助与网页进行录音操作,因此基于Unity新版页面对接方式jslib实现页面录音。可以将录音数据回传至unity,并在unity中进行播放。理…

php录音功能,h5做出网页录音功能

这次给大家带来h5做出网页录音功能,h5做出网页录音功能的注意事项有哪些,下面就是实战案例,一起来看一下。 得益于前辈的分享,做了一个h5录音的demo。效果图如下: 点击开始录音会先弹出确认框: 首次确认允许后,再次录音不需要再确认,但如果用户点击禁止,则无法录音: …

java 网页 录音_Java+FlashWavRecorder实现网页录音并上传【新】

【注意】 【说明】 1.在线录音并直接上传到服务器中 【使用】 1.运行 1.请下载本项目,并导入myeclipse中 2.跑起项目,访问http://localhost:8080/recorder-online-upload查看效果 2.定制 1.打开WEB-INF/view/index.html 2.只有两段html注释中的代码是需要…

java 网页 录音_Java+FlashWavRecorder实现网页录音并上传

【注意】 【前言】 肯定有需求要网页录音,并且要上传。这奇葩需求。 然后找到了FlashWavRecorder, 【原始版本号】 1.下载 在上面的地址下载zip解压之后,目录里面有个index.html。打开之后这效果: 2.录音权限 必须保证你的电脑有麦…

10.WebRTC实现网页录音功能

一、概述 通过WebRTC,实现在页面上进行录音,并将录音结果转换为.wav格式进行播放 二、录音实现 检测是否有麦克风权限 navigator.mediaDevices.enumerateDevices().then(function(devices) {// 检测视频输入let video devices.find((device) > {…

uniapp中使用网页录音并上传声音文件(发语音)——js-audio-recorder的使用【伸手党福利】

uniapp中上传音频只能在app或小程序当中实现,如何使用网页完成语音的录制和上传则成为了困扰前端童鞋的重点。 本文着重解决: js-audio-recorder报 error:浏览器不支持getUserMedia ! 的问题。 js-audio-recorder报 NotFoundError : Requested device no…

前端实现在浏览器网页中录音

一、整体实现的思想 页面中实现录音需要使用浏览器提供的MediaRecorder API,所以要实现页面录音就需要浏览器支持MediaStream Recording相关的功能,即浏览器能够获取浏览器的录音权限。 页面内容,需要一个记录录音开始和结束的按钮,以及一个用…

基于神经网络的自适应最优控制

《 N e u r a l n e t w o r k a p p r o a c h t o c o n t i n u o u s − t i m e d i r e c t a d a p t i v e o p t i m a l c o n t r o l f o r p a r t i a l l y u n k n o w n n o n l i n e a r s y s t e m s 》 D r a g u n a V r a b i e ∗ , F r a n k L e w …

堆排序(排升序为啥建大堆,排降序为啥建小堆)

简介: 之前对堆排序认识的不是很透彻,今天回过头来再把堆排序的知识整理整理!以及排升序为什么要建大堆,排降序要建小堆。 正文: 首先我们要知道:   ①堆的逻辑是一颗完全二叉树;   ②它使…

残差网络Residual Networks-残差网络的创建、训练、测试、调参

残差网络的创建、训练、测试、调参加粗样式 在Keras中实现残差网络模型的创建,并通过模型来实现对图片的分类。 残差网络的预备知识 网络越深越好? 随着网络层级的不断增加,模型精度不断得到提升,而当网络层级增加到一定的数目…

堆排序,为什么升序排列要建大堆,降序排列要建小堆

堆排序中用到了建立大小堆和向下调整的内容,对这些内容有些不了解的同学可以去补一补专门写堆的博客,方便更好的理解堆排序数据结构之堆(Heap),堆的相关操作,用堆模拟优先级队列。 如果把待排序序列分为未排…

操作系统——动态分配算法(首次适应算法,最佳适应算法,最坏适应算法及回收)

操作系统——动态分配 写的时间早了,有些许漏洞和不足,请大家不要介意 分配方式可分为四类:单一连续分配、固定分区分配、动态分区分配以及动态可重定位分区分配算法四种方式,其中动态分区分配算法就是此实验的实验对象。动态分区分配又称为…

pandas中对列进行排序(单列/多列)/(升序/降序)/(多列升序,降序控制)

前言 我想把数据分析刻进DNA里 如下面的数据,对price,要进行最简单的升序操作: 这个好整: import pandas as pdshop pd.read_csv("data/shop.csv", index_colid)shop.sort_values(byprice, inplaceTrue)结果: 如果你想整活(被迫)要把数据进行降序排列: 按照降序,传…

最先适应法、最佳适应法、下次适配法、最差适配法

题: 分析: 1. 首先分析是不是最差适配法,最差适配法意思是首先找到最大的内存空间进行分配, 对于请求的5K存储空间,首先找到地址200K容量为56K的地方进行分配,然后剩余51K。 再对请求的15K进行分配&…

自适应滤波器更新算法-EP1

自适应滤波器更新算法-EP1 自适应滤波器是回声消除系统中非常重要的一个功能模块,而对于自适应滤波器来说,如果更新滤波器系数则是关键所在。本文将介绍几种现有的滤波器更新算法,并附上Matlab测试代码。 1、LMS算法 1.1算法原理 LMS算法即…

自适应神经网络算法原理,单神经元自适应控制

关于神经网络自适应控制求助 这句话你可以直接用,不用加引用。因为这句话是很容易验证的。在网络层数、隐含层节点数逐渐增加,训练次数增加之后,他的拟合能力也是不断增加的,所以说,他可以以任意精度逼近任何非线性连…

【转载】梯度下降算法的参数更新公式

NN这块的公式,前馈网络是矩阵乘法。损失函数的定义也是一定的。 但是如何更新参数看了不少描述,下面的叙述比较易懂的: 1、在吴恩达的CS229的讲义的第四页直接给出参数迭代公式 在UFLDL中反向传导算法一节也是直接给出的公式 2、例子&#x…

Java中Comparator的个人简单理解(升序降序)与使用

目录 Java自定义排序返回值简单记忆理解实践LInkedList升序(默认情况)降序 PriorityQueue升序下的小顶堆(默认情况)降序下的大顶堆 总结补充数组类型自定义排序降序排序 数组 Java自定义排序返回值简单记忆理解 默认情况下&#…