最近看到有个MapboxGL分支上竟然支持类似Cesium的球展示了,详细信息官方地址:https://github.com/mapbox/mapbox-gl-js/issues/10784,话不多说,先上图:


一 为什么要向球进化?
2021年初,MapboxGL从开源BSD协议的1.13版本升级到2.0版本,主打的是3D引擎,新增了天空盒,地形,相机参数,最大倾角限制等功能,官方宣称是WebGIS 3D引擎,但地图仍然是二维平面形态展示,因此,总有杂音说“Mapbox不是一个球,是2.5D”。
从技术人员角度来说,Mapbox老早就是个三维GIS引擎了,看二维还是三维,不是从是否使用WebGL技术来判断,也不是从是否是球来判断的,而是判断其是否支持MVP矩阵。熟悉三维开发的朋友应该知道,三维场景就是基于MVP矩阵对物体各种旋转平移缩放裁剪等一些列转换呈现给用户看的。
为什么要对这段标红咧?因为外行人总以为球是3d,不是球就不是3d,这么说就太low了。以我们人眼的视角,大地在有限视野内还是平面的,上面一堆建筑不就是3d的?所以平面和球面不是3d判断标准。
而OpenLayers是基于WebGL渲染的,但它从设计初始就不支持MVP矩阵,所以无论如何也做不了三维,它就是个二维GIS引擎。
从支持MVP矩阵角度而言,Cesium、MapboxGL、ArcGIS API 4、Maptalks他们都是WebGIS二三维一体化引擎。
所以,MapboxGL支持球,并不是为了堵住“无知吃瓜2.5D群众”的嘴,而是基于业务和体验而言的。某些业务巴掌大的地方,球不球无所谓,而某些业务如全球航班,全球航运等,基于球的展示能更准备表达航线的意义。也就是说某种特定业务背景下,使用球比平面更好,所以能在平面和球面切换时是非常赞的功能。
有人说,这个Cesium老早就有了啊,是的,但他们有差异。Cesium主打的是3Dtiles,基本放弃矢量切片了,Cesium对矢量切片的加载做法是,将矢量切片渲染成栅格切片,栅格切片作为纹理贴到球上,于是,这个纹理不可避免的扭曲变形,字体模糊,也不支持无极缩放,可以说把矢量切片的体验优势全毁了,所以cesium的实现就是“曲线救国”的糊弄态度(极度鄙视下cesium处理矢量切片的态度),其实cesium的底图基本是栅格切片,就没矢量切片选项,永远给你有种我很糊的粗糙感,如下图:

而这对以矢量切片为标准,以用户体验为核心的Mapbox而言,完全不能容忍这种异端,所以Mapbox的球是矢量切片无极缩放,且不糊很高清,体验很赞。
二 MapboxGL 不足
2.1 3D大场景模型官方API不支持
虽然喷了cesium,但cesium仍然是目前重型3D的选择,比如地下管网类系统,其他引擎应该不支持地下的。
正如Cesium就支持3dTiles,arcgis就支持I3S一样,mapbox就支持mvt(矢量切片),论标准的重要性。maptalks就在想把他们都支持了,自己没标准不在乎这些立场问题了。所以mapbox至今在官方api层面不支持3dtiles这种3d模型,也不支持gltf,这些目前统统交由开发者使用loader.gl+customeLayer自行实现,对调API侠可以说很不友好。
2.2 协议变更的用户影响
很多开发者对从BSD协议更换成Mapbox使用协议深感不安,该协议要求不允许修改源代码中Token的统计计数计费功能,打击的是基于Mapbox源码的白嫖党,当这些团队基于Mapbox开发新的SDK时,使用者通过这个SDK也能调用mapbox的在线资源,也就是说新的SDK其实变成了Mapbox数据资源分发渠道了。。。而原先BSD协议的话,你可以删掉,然后就完全成自己的东西了,mapbox既不能通过源码向你收费,你不用它资源了都,也收取不到资源使用费,就是把代码白送了,他们觉的非常亏。同理,各种软件更改协议,都是打击所谓云厂商的无耻白嫖。
那么对不改代码的二次开发,业务应用人员来说,更改协议后,如果是公网应用,地图先完成初始化,地图呈现,然后联网验证token的有效性,如果开发者提交的token非法,那么直接地图被清除,白茫茫一片。
如果是内网应用,先完成地图初始化,地图呈现,然后联网验证token的有效性,咦,网络不通,无法验证,地图就能正常用了。
所以内网随便写个token字符串就可以了,公网必须写合法token,Mapbox先渲染地图再验证token,根据token结果是否清除你的地图,而不是一开始就验证token,是很鸡贼的,既满足内网用户离线使用,又能对公网用户一个不漏的统计。
一句话,地主家也没余粮啊。。。




