mapbox-gl | 1.9 地图控件

1,577 阅读3分钟

简述

地图控件,是在地图上添加一些DOM元素,辅助我们获取地图上的信息,最常见的是指北针,缩放比例等,本节将讲述如何添加这些控件。

control

addControl

// 添加一个导航控件
map.addControl(new mapboxgl.NavigationControl());

addControl 这个方法有两个参数,第一个参数为控件实例,第二则是该控件要放到屏幕的哪里,有四个选项,左上左下,右上右下,默认在右上

removeControl

移除控件

const navigation = new mapboxgl.NavigationControl();

map.addControl(navigation);
// 移除
map.removeControl(navigation);

hasControl

是否已有某控件

const navigation = new mapboxgl.NavigationControl();
map.addControl(navigation);
const added = map.hasControl(navigation);
//  true

控件

官方提供了几个地图控件,本节只详细讲常用的

导航控件

说叫导航,但并不能解释这个控件的作用,它主要由两个功能,指北针,以及使地图放大缩小的两个按钮

const nav = new mapboxgl.NavigationControl();
map.addControl(nav, 'top-left');

默认情况下,他是一个指北针和地图放大缩小的空间,也可以在初始化时传参配置控件。

const nav = new mapboxgl.NavigationControl({
visualizePitch: true,
showCompass: true,
showZoom: true,
});

visualizePitch,控制在我们倾斜地图时(pitch变化),指北针也会跟着倾斜,默认是不倾斜的(false) showCompass 是否显示指北针,默认为显示(true) showZoom 是否显示缩放按钮,默认为显示(true)

全屏控件


map.addControl(new mapboxgl.FullscreenControl({container: document.querySelector('body')}));

加一个让地图全屏显示的按钮,FullscreenControl即便你传值,也可以实现全屏功能,传的这个参数,只有在特定情况下才去传,平时是不需要传的

比例尺控件

const scale = new mapboxgl.ScaleControl({
maxWidth: 80,
unit: 'imperial'
});
map.addControl(scale);

增加一个地图比例尺,可以设置其最大长度和单位

定位控件

map.addControl(new mapboxgl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: true,
showUserHeading: true
}));

可以获取你当前的位置(需要浏览器允许),这个不准备多介绍,用的不是很多

属性控件

const map = new mapboxgl.Map({attributionControl: false})
.addControl(new mapboxgl.AttributionControl({
customAttribution: 'Map design by me'
}));

在地图角落写上一句话,一般很少用到。

以上便是官网提供的控件了,当然,这些并不能完全满足我们的需求,官方也提供了 这些控件的父类 IControl,允许其他人对控件进行封装开发,只不过,这并不是入门章节的重点,接下来我再介绍几个非官方提供的控件

mapbox-gl-draw

绘制控件,提供了在地图上绘制点线面的基础能力,功能十分完善,有时间的同学可以研究一下它的源码。

mapbox-gl-export

导出控件,将地图当前内容作为图片导出

mapbox-gl-geocoder

地名搜索,这个控件我不是很推荐,毕竟是国外的搜索服务,数据可能不是最新的,建议采用国内的搜索服务。

mapbox-gl-legend

地图图例,功能还可以,但样式大多数情况下是不符合项目需求的。

总结

其实还有很多非官方控件,感兴趣的可以到这个网址上查看吧,这个网站不止控件,还有很多其他的插件。

作为初学者,学习并了解如何使用mapbox是最重要的,而这些非中心的功能(控件,插件)有时是我们发挥创造性的地方,我建议,如果在项目中要使用这些非官方控件,可以顺便阅读一下代码,有时间的话,自己去写一个,造造轮子,这样会对自己有很大的帮助。

接下来一节是本章的最后一节,将提供更多的示例。