You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mapbox GL清除标记报错:Uncaught TypeError: Cannot read property 'lng' of undefined

解决Mapbox GL清除标记时的Cannot read property 'lng' of undefined错误

这个问题我之前也碰到过,根源在于你创建Marker的流程有个小疏漏——你没有给Marker设置地理位置就直接添加到地图上了,导致后续执行remove()时,Mapbox内部代码尝试访问Marker的位置属性却找不到有效值,从而抛出类型错误。

问题原因拆解

当你执行new mapboxgl.Marker().addTo(map)时,这个Marker实例并没有绑定任何有效的经纬度信息(lngLat属性是undefined)。而Mapbox的remove()方法在执行时,需要依赖Marker的位置信息来完成地图上的元素清理操作,尝试读取undefined的lng属性自然就会报错。

修复方案

方案1:先设置Marker位置,再添加到地图

这是最规范的做法,确保Marker在添加到地图前已经有了明确的经纬度:

var map = new mapboxgl.Map({ 
  container: 'map', 
  style: 'mapbox://styles/mapbox/streets-v9',
  center: [116.4074, 39.9042], // 可选,初始化地图中心
  zoom: 10 // 可选,初始化缩放级别
}); 

// 先设置位置,再添加到地图
var marker = new mapboxgl.Marker()
  .setLngLat([116.4074, 39.9042]) // 替换成你需要的经纬度
  .addTo(map); 

// 现在执行remove就不会报错了
marker.remove();

方案2:安全移除的判断逻辑

如果你的业务场景中确实需要先创建Marker、后续再设置位置,可以在移除前先判断Marker是否有有效的位置信息:

// 安全移除Marker的逻辑
if (marker && marker.getLngLat()) {
  marker.remove();
}

这样就能避免因为Marker没有位置信息而触发的错误啦。

内容的提问来源于stack exchange,提问作者Võ Cát Thư

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:42