AI
产品服务
解决方案
文档与支持
定价
更新时间: 2026/03/12 14:31
简介

百度地图上负责与地图交互的UI元素称为控件。百度地图API中提供了丰富的控件,您还可以通过Control类来实现自定义控件。

DEMO详情
普通控件
自定义控件
提供的控件

详情可见类参考

控件类名简介

抽象基类

Control

所有控件均继承此类的方法、属性。通过此类您可实现自定义控件

平移缩放控件

NavigationControl

PC端默认位于地图左上方,它包含控制地图的平移和缩放的功能。移动端提供缩放控件,默认位于地图右下方

缩略地图

OverviewMapControl

默认位于地图右下方,是一个可折叠的缩略地图

比例尺

ScaleControl

默认位于地图左下方,显示地图的比例关系

地图类型

MapTypeControl

默认位于地图右上方

版权

CopyrightControl

默认位于地图左下方

定位

GeolocationControl

针对移动端开发,默认位于地图左下方

向地图添加控件

可以使用Map.addControl()方法向地图添加控件。

1. 地图初始化

添加控件前,地图需要进行初始化。例如,要将标准地图控件添加到地图中,可在代码中添加如下内容:

var map = new BMap.Map("container");
map.centerAndZoom(new BMap.Point(116.404,39.915),11);
map.addControl(new BMap.NavigationControl());
2. 添加多个控件

在本例中我们向地图添加一个平移缩放控件、一个比例尺控件和一个缩略图控件。在地图中添加控件后,它们即刻生效。

map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.ScaleControl());
map.addControl(new BMap.OverviewMapControl());
map.addControl(new BMap.MapTypeControl());
map.setCurrentCity("北京"); // 仅当设置城市信息时,MapTypeControl的切换功能才能可用
控制控件位置

初始化控件时,可提供一个可选参数,其中的anchor和offset属性共同控制控件在地图上的位置。 anchor表示控件的停靠位置,即控件停靠在地图的哪个角。当地图尺寸发生变化时,控件会根据停靠位置的不同来调整自己的位置。

anchor值位置说明

BMAP_ANCHOR_TOP_LEFT

表示控件定位于地图的左上角

BMAP_ANCHOR_TOP_RIGHT

表示控件定位于地图的右上角

BMAP_ANCHOR_BOTTOM_LEFT

表示控件定位于地图的左下角

BMAP_ANCHOR_BOTTOM_RIGHT

表示控件定位于地图的右下角

控件位置偏移

除了指定停靠位置外,还可以通过偏移量来指示控件距离地图边界有多少像素。如果两个控件的停靠位置相同,那么控件可能会重叠在一起,这时就可以通过偏移值使二者分开显示。
如下示例为:将比例尺放置在地图的左下角,由于API默认会有版权信息,因此需要添加一些偏移值以防止控件重叠。

var opts = { offset: new BMap.Size(150,5) }
map.addControl(new BMap.ScaleControl(opts));
修改控件配置

地图API的控件提供了丰富的配置参数,您可参考API文档来修改它们以便得到符合要求的控件外观。例如,NavigationControl控件就提供了如下类型:

平移缩放控件的类型说明

BMAP_NAVIGATION_CONTROL_LARGE

表示显示完整的平移缩放控件

BMAP_NAVIGATION_CONTROL_SMALL

表示显示小型的平移缩放控件

BMAP_NAVIGATION_CONTROL_PAN

表示只显示控件的平移部分功能

BMAP_NAVIGATION_CONTROL_ZOOM

表示只显示控件的缩放部分功能

下图从左向右依次展示了上述不同类型的控件外观,前四个为PC端平移缩放控件样式,最后一个为移动端缩放控件样式:

如下示例为:将调整平移缩放地图控件的外观。

var opts ={ type: BMAP_NAVIGATION_CONTROL_SMALL }
map.addControl(new BMap.NavigationControl(opts));
自定义控件

百度地图API允许您通过继承Control来创建自定义地图控件。

1. 定义一个自定义控件的构造函数并继承Control

您需要定义自定义控件的构造函数,并在构造函数中提供defaultAnchor和defaultOffset两个属性,以便API正确定位控件位置,接着让其继承于Control。在下面的示例中我们定义一个名为ZoomControl的控件,每一次点击将地图放大两个级别。它具有文本标识,而不是平移缩放控件中使用的图形图标。

// 定义一个控件类,即function
function ZoomControl() {
// 设置默认停靠位置和偏移量
this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;
this.defaultOffset = new BMap.Size(10, 10);
}
// 通过JavaScript的prototype属性继承于BMap.Control
ZoomControl.prototype = new BMap.Control();
2. 初始化自定义控件

设置自定义控件构造函数的prototype属性为Control的实例,以便继承控件基类。

当调用map.addControl()方法添加自定义控件时,API会调用该对象的initialize()方法用来初始化控件,您需要实现此方法并在其中创建控件所需的DOM元素,并添加DOM事件。所有自定义控件中的DOM元素最终都应该添加到地图容器(即地图所在的DOM元素)中去,地图容器可以通过map.getContainer()方法获得。最后initialize()方法需要返回控件容器的DOM元素。

// 自定义控件必须实现initialize方法,并且将控件的DOM元素返回
// 在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中
ZoomControl.prototype.initialize = function(map) {
// 创建一个DOM元素
var div = document.createElement("div");
// 添加文字说明
div.appendChild(document.createTextNode("放大2级"));
// 设置样式
div.style.cursor = "pointer";
div.style.border = "1px solid gray";
div.style.backgroundColor = "white";
// 绑定事件,点击一次放大两级
div.onclick = function(e){
map.zoomTo(map.getZoom() + 2);
}
// 添加DOM元素到地图中
map.getContainer().appendChild(div);
// 将DOM元素返回
return div;
}
3. 添加自定义控件

添加自定义控件与添加其他控件方法一致,调用map.addControl()方法即可。

// 创建控件实例
var myZoomCtrl = new ZoomControl();
// 添加到地图当中
map.addControl(myZoomCtrl);

上一篇

地图展示

下一篇

个性化地图

本篇文章对您是否有帮助?