AI 地图
产品服务
解决方案
文档与支持
定价
更新时间: 2026/07/27 10:37
您当前查看的是 JSAPI GL 历史版本文档。该版本仅用于维护现有项目,不建议用于新项目开发。新项目请使用 JSAPI 4.0,如需升级现有项目,请参考升级指南
You are viewing the legacy JSAPI GL documentation. This version is maintained for existing projects only and is not recommended for new development. For new projects, use the JSAPI 4.0 documentation. If you are upgrading an existing project, please refer to the Migration Guide.
绘制点、线、面
简介

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
目前JSAPI GL版支持的覆盖物以基本图形为主。本节重点介绍一下如何向地图添加标注,以及与地图相关的一些交互。

提供的覆盖物

可以使用map.addOverlay方法向地图添加覆盖物,使用map.removeOverlay方法移除覆盖物。

覆盖物类名说明

抽象基类

Overlay

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

Marker

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

折线

Polyline

表示地图上的折线

多边形

Polygon

表示地图上的多边形

Circle

表示地图上的圆

添加标注点

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

1. 参考展示地图创建基本地图
2. 向地图中添加标注

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

var point = new BMapGL.Point(116.404, 39.915);
var marker = new BMapGL.Marker(point); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
3. 向地图中添加标注

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

var myIcon = new BMapGL.Icon("markers.png", new BMapGL.Size(23, 25), {
// 指定定位位置。
// 当标注显示在地图上时,其所指向的地理位置距离图标左上
// 角各偏移10像素和25像素。您可以看到在本例中该位置即是
// 图标中央下端的尖角位置。
anchor: new BMapGL.Size(10, 25),
// 设置图片偏移。
// 当您需要从一幅较大的图片中截取某部分作为标注图标时,您
// 需要指定大图的偏移位置,此做法与css sprites技术类似。
imageOffset: new BMapGL.Size(0, 0 - 25) // 设置图片偏移
});
// 创建标注对象并添加到地图
var marker = new BMapGL.Marker(point, {icon: myIcon});
map.addOverlay(marker);
4. 监听标注事件

JSAPI支持监听覆盖物的事件。

marker.addEventListener("click", function(){
alert("您点击了标注");
});
添加折线

Polyline表示地图上的折线覆盖物,它包含一组点,并将这些点连接起来形成折线。Polyline使用详情请见类参考
首先参考展示地图创建基本地图,之后添加折线覆盖物到地图中。折线覆盖物可以分别设置描边粗细、颜色、填充颜色等属性。

var polyline = new BMapGL.Polyline([
new BMapGL.Point(116.399, 39.910),
new BMapGL.Point(116.405, 39.920),
new BMapGL.Point(116.425, 39.900)
], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
map.addOverlay(polyline);
添加多边形

Polygon表示地图上的多边形覆盖物,它包含一组点。多边形将这组点按顺序首尾相连,最终围成一个封闭图形。
首先参考展示地图创建基本地图,之后添加多边形覆盖物到地图中。多边形覆盖物可以分别设置描边粗细、颜色、填充颜色等属性。

var polygon = new BMapGL.Polygon([
new BMapGL.Point(116.387112,39.920977),
new BMapGL.Point(116.385243,39.913063),
new BMapGL.Point(116.394226,39.917988),
new BMapGL.Point(116.401772,39.921364),
new BMapGL.Point(116.41248,39.927893)
], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
map.addOverlay(polygon);
覆盖物配置

1、线、面、圆覆盖物鼠标悬浮图标配置

function overlayCursor(val) {
if (val === 1) {
map.setOverlayMoveCursor(
'url("https://cdn-app.nio.com/PE/2022/2/23/b7d13dfd-b564-4a94-a3ae-7a1e6741daab.svg") 40 53, crosshair',
);
} else {
map.setOverlayMoveCursor('pointer');
}
}

2、点、线、面覆盖物添加geojson转换以及geojson更新数据

var _marker = new BMapGL.Marker(new BMapGL.Point(116.405, 39.92));
var _mGeojson = _marker.toGeoJSON();
console.log(_mGeojson);
_mGeojson.geometry.coordinates = [116.486409, 39.921489];
_marker.updateByGeoJSON(_mGeojson);
// 线、面类似操作

3、线、面、圆编辑节点可配置图标

var nodeT = new BMapGL.Icon(
'http://maponline0.bdimg.com/sty/map_icons2x/MapRes/ditie_beijing_2.png',
new BMapGL.Size(11, 11),
{ offset: new BMapGL.Size(5, 5) },
);
var node = new BMapGL.Icon(
'http://maponline0.bdimg.com/sty/map_icons2x/MapRes/zhongheyiyuan.png',
new BMapGL.Size(11, 11),
{ offset: new BMapGL.Size(5, 5) },
);
var polygon = new BMapGL.Polygon(
[
new BMapGL.Point(116.387112, 39.920977),
new BMapGL.Point(116.385243, 39.913063),
new BMapGL.Point(116.394226, 39.917988),
new BMapGL.Point(116.401772, 39.921364),
new BMapGL.Point(116.41248, 39.927893),
],
{
node: node, // 线节点
nodeT: nodeT, // 线段中间节点
strokeStyle: 'dashed',
strokeColor: 'blue',
strokeWeight: 8,
strokeOpacity: 0.8,
},
);

4、线、面、圆边可设置图片纹理

var polyline = new BMapGL.Polyline(
[
new BMapGL.Point(116.399, 39.91),
new BMapGL.Point(116.405, 39.92),
new BMapGL.Point(116.423493, 39.907445),
],
{
strokeTexture: {
// width/height 需要是2的n次方
url: './images/Icon_road_blue_arrow.png',
width: 16,
height: 64,
},
strokeWeight: 8,
strokeOpacity: 0.8,
},
);
map.addOverlay(polyline);

上一篇

英文地图

下一篇

带高度的点
本篇文章对您是否有帮助?