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

Leaflet新版使用VectorGrid绑定点击事件报reading 'lat'错误如何解决

问题原因

该报错是Leaflet.VectorGrid插件长期未更新,未适配Leaflet 1.3及以上版本的事件交互逻辑导致的。高版本Leaflet在处理图层交互事件时,要求事件对象必须携带合法的latLng坐标属性,但VectorGrid触发点击事件时没有注入该属性,导致Leaflet内部读取lat属性时报错。

解决方案

有两种常用修复方式,可根据需求选择:

方案1:修改VectorGrid源码兼容高版本Leaflet

这是最优解,修改后可以继续使用新版Leaflet的所有特性,修改步骤如下:

  1. 打开Leaflet.VectorGrid的源码文件,搜索定位到_fireFeatureEvent方法,该方法是插件用来向上层抛出矢量要素交互事件的核心逻辑。
  2. 在方法内部触发自定义事件前,补充latLng属性的赋值逻辑,修改后的代码参考:
function _fireFeatureEvent (e, layer) {
  // 新增以下代码,从原始鼠标事件解析经纬度坐标
  e.latlng = this._map.mouseEventToLatLng(e.originalEvent);
  
  // 原有事件触发逻辑,也可以直接在fire参数里新增latlng字段
  this.fire(e.type, {
    layer: layer,
    feature: layer.feature,
    originalEvent: e,
    latlng: e.latlng // 新增字段,把解析好的经纬度传给上层事件
  });
}

修改后重新引入插件即可正常触发点击事件,不会再报lat属性读取错误。如果你是通过npm安装的Leaflet.VectorGrid依赖,可以使用patch-package工具把本次修改做成持久化补丁,避免后续重新安装依赖时修改被覆盖。

方案2:回退Leaflet版本

你已经测试过Leaflet 1.0.0~1.2.0版本和该插件兼容,不需要修改任何代码,直接把项目依赖的Leaflet版本降级到1.2.x范围即可正常运行。

内容的提问来源于stack exchange,提问作者Tek Kshetri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:45:05