控件就是用来控制地图的小部件,类似于word里面用来编辑文本格式的各种小工具。控件是附着在地图上的,有了地图,控件才有意义。很多地图框架都有控件的概念,如openlayers,leaflet等。mapbox的控件有特定的格式,内部的控件具有这种格式,如果要自己编写格式,则也需要遵循该格式。
class CustomControl{
onAdd(map) {
this._map = map;
this._container = document.createElement("div");
return this.;
}
onRemove() {
DOM.remove(this._container);
}
getDefaultPosition() {
return 'bottom-left';
}
}
控件类至少需要包含onAdd
和onRemove
方法, onAdd
这是添加控件元素并实现对地图控制的关键方法;onRemove
一般用于在地图销毁的时候移除控件元素,也推荐使用;getDefaultPosition
用来设置控件的默认位置,可以省略,省略后添加元素的默认位置是右上角。
地图实例操作控件的三个方法
addControl 添加地图控件
map.addControl(anyControl, 'top-left');
方法首先会判断anyControl
是否具有onAdd
方法,不存在则会报错,然后调用控件的onAdd
方法,并将地图实例map传入并在页面上添加控件元素。添加控件后会将控件保存在缓存数组中,用来后续备用,如移除。
removeControl 移除地图控件
map.removeControl(anyControl);
方法首先会判断anyControl
是否具有onRemove
方法,不存在则会报错,然后在缓存数组中查找对应的控件,找到则在缓存中移除,最后调用控件的onRemove
方法,在页面上移除控件元素。
hasControl 判断是否存在地图控件
map.hasControl(anyControl);
方法判断缓存数组中是否存在anyControl
,存在则返回true
官方控件
mapbox-gl-accessibility: 视觉障碍控件,添加后点击地物会有一个小方块
mapbox-gl-boundaries: 显示/隐藏争议边界(仅支持印度)
mapbox-gl-compare:卷帘工具,比较两幅地图 官方例子
mapbox-gl-controls:添加距离测量,切换底图,点击查看地图要素信息,悬浮查看地图要素信息等
mapbox-gl-directions:导航控件,支持开车,步行,自行车 官方例子
mapbox-gl-draw:绘制和编辑 官方例子
mapbox-gl-elevation:高程探测控件
mapbox-gl-export:地图导出控件(PDF/PNG)
mapbox-gl-geocoder:地理编码控件 官方例子
mapbox-gl-infobox:信息窗控件
mapbox-gl-legend:图例控件 例子
mapbox-gl-opacity: 修改切片图层透明度 例子
mapbox-gl-style-switcher:底图切换控件 例子
mapboxgl-minimap: 鹰眼图控件 [例子