范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

mapboxgl互联网地图纠偏插件(一)

  之前写过一个 leaflet 互联网地图纠偏插件,引用插件后一行代码都不用写,就能解决国内互联网地图瓦片的偏移问题。
  最近想对 mapboxgl 也写一个这样的插件。
  原因是自己发布的OSM矢量瓦片地图精度不够高,当需要放大地图查看详细信息时,就可以拿百度、高德的栅格瓦片做个补充。而使用它们的第一步就是要先纠偏。
  去研究了 mapboxgl 的底层代码,发现很多都看不懂。于是去恶补了 webgl 的知识,再去看 mapboxgl 的源码,哈哈,万变不离其宗,GIS知识还是那些,只是计算机绘制图形的方式变了而已。
  研究后,把目标锁定在了 transform.js 文件上,这个文件主要用来处理各种坐标转换问题,包括经纬度坐标、墨卡托坐标、屏幕坐标、webgl坐标等,还负责生成瓦片的编号。
  文件中的 coveringTiles 方法就是用来计算瓦片的 x、y、z 编号的,它会返回当前比例尺和可视范围内的所有瓦片编号。
  根据 x、y、z 瓦片编号请求到互联网地图瓦片后,会在 calculatePosMatrix 方法里计算瓦片显示的屏幕位置。
  mapboxgl 和 leaflet 的显示原理不同,mapboxgl 是三维坐标系,使用webgl绘图,增加了一个维度后,多出了很多东西要处理,二维坐标系加载瓦片时,只需要考虑瓦片的 x、y 位置,三维坐标系在此基础上还要考虑倾斜和透视。
  webgl 的坐标都是通过位置变换矩阵来表示的,这一点和leaflet的差别很大。
  上面的 calculatePosMatrix 方法就是根据瓦片的 x、y、z 编号,计算出瓦片在 webgl 中显示的位置变换矩阵。这里分别将瓦片的平移矩阵、缩放矩阵和视图+投影矩阵进行了相乘,得到了最终的位置变换矩阵。
  看这个方法时我有些疑惑,它是如何根据瓦片的 x、y、z 编号来计算位置变换矩阵的,去研究了xyz协议后,才明白xyz坐标和经纬度坐标是有一套互转公式的,瓦片编号转经纬度时返回的坐标是瓦片左上角的经纬度。详见:https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
  关于 webgl 变换矩阵的知识可以参考这篇文章 https://www.cnblogs.com/charlee44/p/11623502.html 或 《WebGL编程指南》,我更推荐后者,因为后者讲的更系统更容易理解。
  不得不说,webgl 的位置变换矩阵计算还是有一些复杂的,所以就想看看 mapboxgl 中有没有内置经纬度坐标和 webgl 坐标互转的方法,查看后发现,只有经纬度坐标、墨卡托坐标和屏幕坐标三者互转的方法,没有 webgl 的。
  那就曲线救国,先将经纬度转成屏幕坐标,再自己写个方法把屏幕坐标转成 webgl 坐标。
  实现思路: 根据瓦片编号和经纬度的互转公式,计算出瓦片左上角的经纬度 对瓦片左上角的经纬度进行纠偏,得到 wgs84 坐标的经纬度 将纠偏前、后的经纬度分别转为屏幕坐标,再将转换后的屏幕坐标相减,得出瓦片屏幕坐标的偏移量 将瓦片屏幕坐标的偏移量换算成 webgl 坐标的偏移量 在瓦片的平移矩阵中加上刚才计算出的 webgl 坐标偏移量,理论上就能实现对瓦片的纠偏
  在实现过程中,将 1、2、3 步搞定以后,因为暂时还没有想好怎么实现第4步,于是就先将第 3 步的结果屏幕坐标偏移量,直接加到了第 5 步的平移矩阵中,结果很让人意外。
  实现代码:
  实现效果:
  以天安门国旗为参照,纠偏前
  纠偏后
  哈哈,难道就这么搞定了?
  难道平移矩阵中的数值都是按屏幕像素来计算的?
  至少目前看来是的。
  正当我开心的不要不要时,咦?边上为什么会有空白,瓦片没有请求过来?我接着放大地图,白边越来越大了
  嗯~ 这个好解决,应该是因为 mapboxgl 只显示当前范围的瓦片,当屏幕边缘的瓦片被纠偏到屏幕中间时,边缘就会出现空隙。
  只要将当前显示范围向外扩展一些就能搞定。
  正当我在开心的研究如何向外扩展显示范围时,无意中把地图倾斜了一下,我的妈呀!这是什么鬼
  看到这个,我当时的心情瞬间就不好了。
  ~~ 容我整理下心情 ~~
  好了,个人猜想,原因可能是,在地图旋转时,瓦片根据 webgl 坐标的中心点计算要旋转的角度和移动的距离,现在瓦片纠偏后位置发生了偏移,但计算旋转坐标时,还是根据webgl的中心点,所以旋转时就出问题了。
  具体我也没想明白呢,感觉还是对瓦片纠偏后,需要对某个中心点也需要纠偏一下。如果有技术大牛看到这篇文章也可以给留言指导一下。
  总结: 目前搞定了垂直视角下的瓦片纠偏 后续需要解决纠偏后屏幕边缘出现的空白区域问题。 地图倾斜和旋转时瓦片会出现错位,需要继续研究。
  最后,mapboxgl纠偏插件还没有完全搞定,就不放代码了,后续有新进展会再跟大家分享,等完全搞定以后再向以前一样跟大家分享插件。
  原文地址:http://gisarmory.xyz/blog/index.html?blog=mapboxglMapCorrection1
  关注《GIS兵器库》, 第一时间获得更多高质量GIS文章。
  本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名《GIS兵器库》(包含链接: http://gisarmory.xyz/blog/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

2020年国外卫星通信企业破产分析报告核心摘要2020年上半年已有超过四家卫星通信企业进入破产保护状态,甚至包括已经运营超过50年的全球第二大卫星通信企业Intelsat。国内卫星互联网发展如火如荼的今天,这一现象引起真可怕,颠覆三观,以性换租前段时间,在网上看到一段聊天记录,真的震碎三观。一名女生为了600块的便宜房租,就把自己男朋友绿了,和男房东上了床,一周2次。这对情侣都是刚毕业不久的大学生,男生和一堆男生租在一起又动手了?越南被开火警告又动手了!日前南海再次爆发激烈冲突,越南主动挑衅,却直接被对方开火扫射警告,损失惨重。据悉,当时越南闯入南海纳土纳海域后,印尼海军立即出动了巡逻艇等大批船舰,直接将越南渔船拦截,并51岁梁小冰大晒与老公陈嘉辉热舞短片网友惊变蛇精样有古装皇后之称嘅梁小冰参选1990年香港小姐,以季军殊荣出道,51岁嘅佢虽已淡出幕前,但不时喺社交平台分享近况,畀人话系冻龄代表,仲试过一连分享9张以浓妆上阵嘅自拍照获网民激赞。不翻车鱼战斗机,德国人快笑死了航空发展史的初期,别出心裁造型奇特的飞行器特别多多,不过就像人们常说的怪事年年有,法国人特别多那样,法国人设计的科尔科ACA5战斗机真是战斗机界的一大奇葩,它是那样的神秘而且独具特2020艾瑞企业服务奖项申报全面开启近几年,企业服务受到创业者和投资人的广泛关注,服务形式日趋多样,服务规模不断壮大。从长期看企业服务的本质是社会分工是生产关系的再造,是生产力发展的必然需求。从短期看C端红利消失,企韩国大宇多功能料理锅,开启健康饮食新风尚每次在外面和朋友一起吃饭,多多少少有点担心饭菜的卫生问题,而且价格也不便宜,所以很少能够吃得舒舒服服的。最近入手了一款多功能料理锅韩国大宇多功能料理锅,也是时候在家亲自动手做一些货众人看衰的平井一夫,凭什么救活索尼?今年4月,日本索尼(Sony)公布截至今年3月的2020财年合并财报,净利润首次超过1万亿日元。这个成绩除了受惠疫情,以及现任执行长吉田宪一郎(KenichiroYoshida)的被拖到厕所霸凌!男星凄惨童年曝光李杰明透露国小曾被霸凌饶舌新秀李杰明11月3日发行个人首张同名专辑,并举办发片记者会,长相酷似周兴哲的他,因此受封饶舌界周兴哲。而在记者会上,他自爆国中异常叛逆,甚至抽烟打架翘家甚举人相当什么学历,研究生可以考上举人吗?说到举人,大家都会想到古代的伟大制度科举制,还有我们曾经在学校学过的范进中举的故事。来到集上,只见范进正在一个庙门口站着,散着头发,满脸污泥,鞋都跑掉了一只,兀自拍着掌,口里叫道中活下去就赢了,当今蛇类物种将近4,000种,是因为恐龙灭绝6,600万年前,一场毁灭性的小行星撞击事件引发后续地震海啸和无穷野火,导致当时称霸地表的恐龙近乎灭绝,但某些哺乳动物鸟类青蛙鱼类等设法生存了下来。其中,蛇也是少数从小行星撞击中倖
自动驾驶运输车跑1500公里比人类快10小时图片来自TuSimple汽车自动驾驶技术,如果得到充分发展,最终有可能比手动驾驶更能减少事故发生的可能性。以目前的技术,在没有十字路口和行人且可以持续匀速行驶的高速公路上,自动驾驶助力智能消费,北京消费季发放10亿元消费券北京消费季在海淀区中关村启动,在整个活动期间,多家企业将联手发放10亿元智能和信息消费券,从而吸引更多消费者主动进行消费。毕竟现在暑假是智能科技产品消费的高峰期,那么针对暑期,需要四门更实用2。88万元起售对标宏光MINIEV朋克多多正式开启预售朋克汽车此前公布了美多啦系列的第二款车,朋克多多。朋克多多定位微型电动车,此次公布的预售车型共有三款,分别是靓多多乐多多酷多多,他们的预售价分别为2。883。283。98万元。从预稳定币和比特币的区别究竟是什么?在区块链领域第一个被应用的数字货币就是比特币,比特币从诞生至今一直都是数字货币中的龙头,即使如此,比特币的波动还是很大的,作为货币其波动性如此之大,是很难进行商品交换的,为了解决这JavaSE基础第8篇封装和继承private关键字使用private修饰的私有属性只能在它所在类中被访问,如果外界想要访问私有属性,需要提供公有方法,包括用于获取属性值的getXxx()方法和设置属性值的set大数据的培训中修改MongoDB数据类型的讲解在大数据的培训中,Mongo是一个高性能开源无模式的文档数据库,在很多场景下可以用来替代传统的关系数据库或者键值存储模式。而对于修改mongodb中数据类型,我们是如何做的呢?Mo征程5发布,地平线打开自动驾驶芯片新格局首先,花一分钟我们来了解一下征程5系列芯片的8个亮点征程5是业界第一款集成自动驾驶和智能交互于一体的全场景整车智能中央计算芯片征程5单颗芯片AI算力最高可达128TOPS,支持16内外兼修,一款真正的5G旗舰手机,荣耀30Pro你值得拥有哈喽大家好,我是你们的老朋友小生,每天都会给大家更新我的原创内容,今天我们一起来看看荣耀30Pro这部手机吧!外观方面,荣耀30Pro的正面是一块6。57英寸效果相当惊艳的70超曲5部开启狠降模式的真香旗舰,每一部都极具性价比,值得入手Realme真我GT大师探索版Realme真我GT大师探索版是刚发布不久的新机,也是Realme质感最好的一部手机,12256GB版本的价格为3199元,首发3099元,没想到上市5G奥运,不一样的科技惊喜5G奥运,不一样的科技惊喜东京奥运已经在北京时间8月8日晚落下帷幕,众所周知受疫情影响观众不能进场,广大体育迷只能开启云追奥运模式。然而5G黑科技的身影充斥在场内外的每个角落,成为中兴Axon305G评测向真全面屏又迈出一大步近几年各大手机厂商都对全面屏显示有着不同的理解,尤其是刘海屏水滴屏打孔屏我们都颇为熟悉,但是这些解决方案严格意义来说都称不上全面屏幕手机。要保证前置摄像头的功能情况下打造一块完美无