Mapbox GL JS是一个JavaScript库,使用WebGL渲染交互式矢量瓦片地图和栅格瓦片地图。WebGL渲染意味着高性能,MapboxGL可以渲染大量的地图要素,拥有流畅的交互以及动画效果、能够显示立体地图而且支持移动端,是一款十分优秀的WEB GIS开发框架。css
在页面引入MapboxGL脚本库和样式库:git
<script src='https://api.mapbox.com/mapbox-gl-js/v0.40.0/mapbox-gl.js'></script><link href='https://api.mapbox.com/mapbox-gl-js/v0.40.0/mapbox-gl.css' rel='stylesheet'/>
也能够在GitHub找到MapboxGL : https://github.com/mapbox/mapbox-gl-js/releasesgithub
执行上述引入脚本后即建立了mapboxgl对象,经过它可使用MapboxGL的所有功能。
在使用以前,须要先设置mapboxgl.accessToken。access tokens(访问令牌)可使用API提供的示例(以下),也能够注册MapBox帐号,在用户信息页查看或者建立令牌。ajax
接下来使用建立地图实例。主要配置项以下:npm
const myMap = new mapboxgl.Map({ container: '<Id of Container Element>', style: '<Your Style Here>', center: [112.508203125, 37.97980872872457], zoom: 4, pitch: 0, bearing: 0, });
mapbox的架构有些奇怪,接口层和逻辑层其实没有明确的区分;mapbox中style是一个比较重要的类;统辖整个数据层次;Painter中集成了draw和style两个模块json
数据的加载与解析在source中;主要有两部分组成,逻辑部分在主线程中好比:
vector_tile_source、geojson_source中
而实际的加载解析则是在对应的worker中,好比:
vector_tile_worker_source、geojson_worker_source中api
以vector_tile_source和vector_tile_worker_source为例介绍,实际的数据解析在vector_tile_worker_source中的loadTile方法,这里接收主线程中传递的参数,以及子线程的回调函数,应该是Actor中的done函数架构
进而进入
loadVectorData函数,getArrayBuffer是调用普通的ajax去请求二进制数据,与室内的数据方式同样。数据请求成功后,将二进制数据实例化成一个框架
PBF是一个协议二进制格式,他里面提供了一些方法,方便按照必定的规则来解析二进制数据。函数
这里是VectorTile中的一个VectorTileLayer读取到的二进制字段;这里的解析是把二进制转化成js对象,里面的数据还须要进一步转换成可用的几何数据和属性数据。
由于mabox的二进制编码使用的是谷歌的二进制编码方式,因此能够直接使用PBF这个npm包来进行解码
LoadVectorData加载完后数据进入回调函数中;
接下来进入WorkerTile中的parse方法,开始各类解析数据;这里面要看一下LayerIndex这个对象是StyleLayerIndex的一个实例,里面存放一些跟样式相关的属性
而后从sourceLayer中获取VectorTileFeature,实际也是从pbf中解析数据
接下来是建立bueket并调用bucket的populate方法
polulate能够理解为首先根据比例进行数据缩放,而后调用addFeature方法,将Feature的几何图形信息添加到bucket的vertexArray中,而后FeatureIndex记录一些信息。
不一样的Bucket的polulate方法也不一样,addFeature方法更不一样。像SymbolBucket添加到vertexArray中的就不是单一的点信息,而是文本盒子的信息。