BMap点击标记后如何获取当前marker的经纬度?

UX欢欢 阅读 47

我在用百度地图BMap开发时,给地图加了几个marker,现在想在点击某个marker的时候拿到它自己的经纬度,但试了好几种方法都不对。比如我用marker.getPosition()却报错说undefined,是不是监听事件的方式有问题?

这是我的部分代码:

const marker = new BMap.Marker(new BMap.Point(116.404, 39.915));
marker.addEventListener('click', function(e) {
  console.log(e.point); // 这个能拿到点击位置,但不是marker本身的坐标
  console.log(this.getPosition()); // 这里报错,this好像不是marker?
});
map.addOverlay(marker);
我来解答 赞 14 收藏
二维码
手机扫码查看
2 条解答
❤保霞
❤保霞 Lv1
问题在于你用的应该是BMapGL(新版本3D地图),这个版本的事件回调里this的指向不太稳定。

直接用e.target就能拿到:

const marker = new BMap.Marker(new BMap.Point(116.404,39.915));
marker.addEventListener('click', function(e) {
// e.target 就是当前点击的marker
const position = e.target.getPosition();
console.log('经度:' + position.lng, '纬度:' + position.lat);
});
map.addOverlay(marker);


如果你用的是旧版BMap(2.0之前非GL版本),this.getPosition()其实是可以用的。但既然你在用百度地图,现在新项目基本都用BMapGL了,这个版本的事件对象里用e.target更稳。

还有一种写法是先保存marker引用:

const marker = new BMap.Marker(new BMap.Point(116.404, 39.915));
marker.addEventListener('click', function() {
console.log(marker.getPosition());
});
map.addOverlay(marker);


直接用外层定义的marker变量调用getPosition()也可以,闭包能访问到。
点赞 1
2026-03-11 21:07
南宫江梅
闭包里直接用marker变量就行了,别折腾this

marker.addEventListener('click', function(e) {
console.log(marker.getPosition());
});


或者用e.target

marker.addEventListener('click', function(e) {
console.log(e.target.getPosition());
});


百度地图的事件回调里this指向有时候会抽风,直接引用变量最稳。
点赞 5
2026-02-28 18:13