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

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
覆盖物主要分为:标注(点标注、矢量图形(包括折线、多边形、圆))、信息窗口、图层。
本节重点介绍一下如何向地图添加标注,以及与地图相关的一些交互。

提供的覆盖物

可以使用map.addOverlay方法向地图添加覆盖物,使用map.removeOverlay方法移除覆盖物,注意此方法不适用于InfoWindow。
详情请见类参考

覆盖物类名说明

抽象基类

Overlay

所有的覆盖物均继承此类的方法

Marker

表示地图上的点,可自定义标注的图标

文本

Label

表示地图上的文本标注,您可以自定义标注的文本内容

折线

Polyline

表示地图上的折线

多边形

Polygon

表示地图上的多边形。多边形类似于闭合的折线,另外您也可以为其添加填充颜色

Circle

表示地图上的圆

信息窗口

InfoWindow

信息窗口也是一种特殊的覆盖物,它可以展示更为丰富的文字和多媒体信息。注意:同一时刻只能有一个信息窗口在地图上打开

地面叠加层

GroundOverlay

表示叠加在地图上的图片,图片的链接、大小、位置等属性可以自定义

海量点

PointCollection

针对点的数量很大的情况,可以使用海量点进行展示

自定义覆盖物

自定义

支持通过继承覆盖物基类Overlay,自定义覆盖物

标注点

Marker是一个用来往地图上添加点标记的类。使用它将任何你希望用户看到的兴趣点标注在地图上。
API提供了默认图标样式,您也可以通过Icon类来指定自定义图标。Marker的构造函数的参数为Point和MarkerOptions(可选)。
注意:当您使用自定义图标时,标注的地理坐标点将位于标注所用图标的中心位置,您可通过Icon的offset属性修改标定位置。
Marker使用详情请见类参考

1. 向地图添加标注

如下示例,向地图中心点添加了一个标注,并使用默认的标注样式:

var map = new BMap.Map("container");
var point = new BMap.Point(116.404,39.915);
map.centerAndZoom(point,15);
var marker = new BMap.Marker(point); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
2. 定义标注图标

通过Icon类可实现自定义标注的图标,下面示例通过参数MarkerOptions的icon属性进行设置,您也可以使用marker.setIcon()方法。

var map = new BMap.Map("container");
var point = new BMap.Point(116.404, 39.915);
map.centerAndZoom(point, 15); // 编写自定义函数,创建标注
function addMarker(point, index){ // 创建图标对象
var myIcon = new BMap.Icon("markers.png", new BMap.Size(23, 25), {
// 指定定位位置。
// 当标注显示在地图上时,其所指向的地理位置距离图标左上
// 角各偏移10像素和25像素。您可以看到在本例中该位置即是
// 图标中央下端的尖角位置。
anchor: new BMap.Size(10, 25),
// 设置图片偏移。
// 当您需要从一幅较大的图片中截取某部分作为标注图标时,您
// 需要指定大图的偏移位置,此做法与css sprites技术类似。
imageOffset: new BMap.Size(0, 0 - index * 25) // 设置图片偏移
});
// 创建标注对象并添加到地图
var marker = new BMap.Marker(point, {icon: myIcon});
map.addOverlay(marker);
}
// 随机向地图添加10个标注
var bounds = map.getBounds();
var lngSpan = bounds.maxX - bounds.minX;
var latSpan = bounds.maxY - bounds.minY;
for (var i = 0; i < 10; i ++) {
var point = new BMap.Point(bounds.minX + lngSpan * (Math.random() * 0.7 + 0.15),
bounds.minY + latSpan * (Math.random() * 0.7 + 0.15));
addMarker(point, i);
}
3. 监听标注事件

事件方法与Map事件机制相同。可参考事件部分

marker.addEventListener("click",function() {
alert("您点击了标注");
});
4. 可拖拽的标注

marker的enableDragging和disableDragging方法可用来开启和关闭标注的拖拽功能。默认情况下标注不支持拖拽,您需要调用marker.enableDragging()方法来开启拖拽功能。在标注开启拖拽功能后,您可以监听标注的dragend事件来捕获拖拽后标注的最新位置。

marker.enableDragging();
marker.addEventListener("dragend", function(e) {
alert("当前位置:"+ e.point.lng +", "+ e.point.lat);
})
标注折线

Polyline表示地图上的折线覆盖物。它包含一组点,并将这些点连接起来形成折线。 Polyline使用详情请见类参考

1. 添加折线

折线在地图上绘制为一系列直线段。可以自定义这些线段的颜色、粗细和透明度。颜色可以是十六进制数字形式(比如:#ff0000)或者是颜色关键字(比如:red)。

Polyline的绘制需要浏览器支持矢量绘制功能。在Internet Explorer中,地图使用VML绘制折线;在其他浏览器中使用SVG或者Canvas。

以下代码段会在两点之间创建6像素宽的蓝色折线:

var polyline = new BMap.Polyline(
[
new BMap.Point(116.399,39.910),
new BMap.Point(116.405,39.920)
],
{ strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5 }
);
map.addOverlay(polyline);

上一篇

个性化地图

下一篇

自定义标注

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