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作为内网服务器的用户没有必要额外采购和修改地图制作技术路线。
优点: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的方式设置根据属性拉伸高度。