leaflet 地图纠偏

2023-11-01 03:30
文章标签 地图 leaflet 纠偏

本文主要是介绍leaflet 地图纠偏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

手头项目需要使用到百度地图进行设备数据展示,设备坐标属高德坐标系,结合小组原有组件,拟初步技术方案:

地图方面:利用leaflet配合leaflet.chinatmsproviders插件,加载百度地图瓦片来实现需求(还可以加载其他地图瓦片,如高德,天地图,谷歌等);

设备坐标方面:原设备坐标是高德坐标(火星坐标系),通过后端转换成百度坐标(百度坐标系)给到前端渲染。

结果:设备位置在leaflet地图上面偏移严重,打开官方百度地图验证,设备位置没有问题,排除后端坐标转换错误的可能性,遂进行问题排查与调研;

设备在官方百度地图上的实际位置

Leaflet上的设备位置,差了十万八千里

问题原因:

经调研了解到Leaflet.ChineseTmsProviders虽然加载了高德,天地图,谷歌等在线地图瓦片,但是并没有对他们进行校正,也就是说加载的这些瓦片,相较于官方地图是存在一定偏移的,leaflet.chinatmsproviders插件并没有做纠偏的这个工作,所以造成了我们虽然坐标没错,但位置相较于官方地图是对不上的。

问题解决:

知道了原因,那么问题就比较好解决了,通过调研找到Leaflet.InternetMapCorrection插件,该插件可以对Leaflet.ChineseTmsProviders加载的瓦片进行纠偏,原理是通过覆盖Leaflet源码,在获取瓦片和地图缩放的方法中,调用内置纠偏算法。说人话就是我们不用转坐标了,继续使用未经转换的高德坐标即可。插件目前支持百度和84互转、 84和火星互转、 火星和百度互转。

用法:

插件地址  https://github.com/gisarmory/Leaflet.InternetMapCorrection

  • 直接复制src中的leaflet.mapCorrection.js文件到本地项目;

  •  在引用leaflet.chinatmsproviders.js后,再引用leaflet.mapCorrection.js

  • 注意,此处有一个小坑,我们需要根据项目的实际需要,在此处修改一下源码,换成你需要的算法,算法名称在leaflet.chinatmsproviders.js文件内开头几行有注释。(github上面没有说这里写死了,插件不生效翻源码才注意到这一点)

如上,大功告成。

几点补充:

一、为什么之前很少发现瓦片偏移问题?

之前的项目中,对于设备坐标的拾取、录入和展示,我们都是在相同地图系统中进行,并在产品中极力控制不要坐标混用。

二、为什么有这么多坐标系?

目前国际上比较通用的坐标系是大地坐标系(WGS-84),我们国家出于保密需要,要求将真实坐标系统进行人为的加偏处理,加密成火星坐标系(GCJ-02),而百度地图对火星坐标系又进行了一次加密,形成了百度坐标系(BD-09)

三、坐标系转换方案:

对于需要转换坐标系的业务场景,可以有如下两种解决方案(欢迎补充):

1)转换地图上点的坐标:可以通过调用相关方法,在前端或者后端做转换。有一些官方接口对每次转换的坐标个数有限制。转换后的坐标最好引用官方地图进行渲染,以免出现偏差;

2)瓦片纠偏:利用leaflet配合leaflet.chinatmsproviders插件,加载需要的地图瓦片,搭配leaflet.mapCorrection.js纠偏瓦片,达到不转换坐标而直接转换瓦片的目的。这种方式对于使用了leaflet开发的项目比较友好。

以上两种方案需结合项目实际情况使用。

这篇关于leaflet 地图纠偏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/320163

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化,对我们搞软件开发的人员来说,影响也是越发明显,比如之前对美对欧的软件居多,现在慢慢的变成了对大鹅和中东以及非洲的居多,这两年明显问有没有俄语或者阿拉伯语的输入法的增多,这要是放在2019年以前,一年也遇不到一个人问这种需求场景的。 地图应用这块也是,之前的应用主要在国内,现在慢慢的多了一些外国的应用场景,这就遇到一个大问题,我们平时主要开发用的都是国内的地

Imageview在百度地图中实现点击事件

1.首先第一步,需要声明的全局有关类的引用 private BMapManager mBMapMan; private MapView mMapView; private MapController mMapController; private RadioGroup radiogroup; private RadioButton normalview; private RadioBu

MMO地图传送

本篇由以下四个点讲解: 创建传送点 传送点配置 编辑器扩展:传送点数据生成 传送协议与实现 创建传送点 建碰撞器触发 //位置归零 建一个传送门cube放到要传送的位置(这个teleporter1是传出的区域 这是从另一张地图传入时的传送门 创建一个脚本TeleporterObject给每个传送cube都绑上脚本 通过脚本,让传送门在编辑器下面还能绘制出来

ArcGIS Pro SDK (十三)地图创作 3 特殊图层

ArcGIS Pro SDK (十三)地图创作 3 特殊图层 文章目录 ArcGIS Pro SDK (十三)地图创作 3 特殊图层1 高程表面图层1.1 创建具有地表图层的场景1.2 创建新的高程表面1.3 将自定义高程表面设置为 Z 感知图层1.4 将高程源添加到现有高程表面图层1.5 从地图中获取高程表面图层和高程源图层1.6 查找高程表面图层1.7 移除高程表面图层1.8 从曲面获

激光SLAM如何动态管理关键帧和地图

0. 简介 个人在想在长期执行的SLAM程序时,当场景发生替换时,激光SLAM如何有效的更新或者替换地图是非常关键的。在看了很多Life-Long的文章后,个人觉得可以按照以下思路去做。这里可以给大家分享一下 <br/> 1. 初始化保存关键帧 首先对应的应该是初始化设置,初始化设置当中会保存关键帧数据,这里的对应的关键帧点云数据会被存放在history_kf_lidar当中,这个数据是和

产品地图经典案例,为盲人设计一款闹钟

在产品设计的旅程中,复杂程度往往超乎你的想象。从理解产品设计的初衷,到制定具体目标,再到解决实际问题,这一过程涉及许多环节。以下是如何通过即时设计在线白板高效绘制产品地图,以便更好地进行产品设计的具体示例——为盲人设计一款闹钟。 即时设计在线白板是一个高效便捷的可视化工具,可以帮助团队更好地协作和整理思路。我们将通过实际案例来展示如何使用它绘制产品地图。https://js.design/?so

Uber开发的地图网格化的包h3

通常使用规则化的网格包括三角形,正方形和六边形。三角形或正方形的网格与其相邻的网格中心距离不同,而六边形则没有此种情况,因此,h3使用的是六边形网格. 地图的网格划分以南京为例子 api文档 https://github.com/uber/h3-py https://h3geo.org/docs/community/bindings 在这里插入图片描述h3包地图划分级别,第一列是边长 H3 P

echarts地图绘制并实现下钻功能

本文参考网址 使用echarts地图需要先准备好echarts地图渲染需要的json数据,数据可以从阿里云地址中下载自己需要的,下载之后直接引入即可使用,本文针对全国地图做一个简单的demo 阿里云界面如图 // 1、准备echarts地图容器<div class="map" ref="myChart" style="width:500px;height:500px;"></div>//

geodatatool(地图资源工具)3.8

geodatatool(地图资源工具)3.8(新)修复更新,修复更新包括: 1.优化在线地图多线程下载及用户体验。 注意:在线地图下载与背景地图显示用的是同样的源,所以在线地图是否能下载,可以先测试主地图背景地图是否能展示。如背景地图能展示,则该在线地图也能下载! 在线地图数据源可根据需要添加,且数据下载具有缓存功能,所有在线数据无论访问还是下载。都会在本地缓存。所以