相关文章推荐
有腹肌的烈酒  ·  WNDCLASSEXW ...·  8 月前    · 
开朗的开心果  ·  Install GitLab Runner ...·  1 年前    · 
鬼畜的大象  ·  Command function ...·  2 年前    · 
mapbox gl的矢量切片地图三维效果

ArcGIS API for JavaScript先前与deck.gl已经可以通过多种方式很好的结合。参考:《 ArcGIS API 场景添加 3D Tiles 》、《 ArcGIS与deckgl结合的不同模式 》。那么我们可以去看一下deck.gl能不能利用mapbox gl矢量切片三维化的这个优势。

技术路线

deck.gl与Mapbox标准的矢量切片有两种结合模式。一个是采用Mapbox底图作为程序全局底图。如: 示例程序 1

优点:可以使用托管在Mapbox gl官网的样式,直接调用Mapbox studio中创作的三维化底图。方便、美观。

缺点:1.web程序底图全局变为了mapbox底图,deck.gl被夺舍了,无法作为单一图层与ArcGIS的场景视图进行结合。

2.mapbox服务器在外网,并且商用要收费。已经采购了ArcGIS作为内网服务器的用户没有必要额外采购和修改地图制作技术路线。

MVTLayer作为业务图层

优点:1.作为单图层,可以借助ArcGIS + deck.gl的官方结合方式在ArcGIS地图视图和场景视图去直接使用。

2.既支持开源生态常用的.mvt格式的矢量切片,也支持ArcGIS为代表的.pbf格式的矢量切片。直接支持ArcGIS发布的VectorTileServer。

缺点:1.在渲染层面,MVTLayer不能加载完整矢量切片style.json样式文件。只能通过deck.gl继承的GeoJSONLayer和TileLayer以及Layer的一些属性进行很有限的前端渲染。不能支持完整的 mapbox矢量切片样式标准

2.在数据层面,只能一次性加载全部矢量切片服务下的子图层。在全部图层加载完毕之前,无法进行子图层的过滤。如果后端采用Mapbox世界地图https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/{z}/{x}/{y}.mvt?access_token=token,那么会造成大量数据冗余(Mapbox过滤图层的机制是style.json样式)。如果使用ArcGIS发布的矢量切片服务,我们只需把建筑物footprint单独发布为一个服务即可。

另外:关于type:fill-extrusion的mapbox标准样式,deck.gl其实是不支持的。但他支持 GeoJSONLayer 使用extruded:true + getElevation:number的方式设置根据属性拉伸高度。