当前位置: 首页 > news >正文

leaflet地图标注在缩放时位置偏移报错与leaflet.draw中文本地化配置

版本

"leaflet": "^1.9.4",

"leaflet-draw": "^1.0.2",

问题

1.leaflet的Marker / Popup / Tooltip移除并再次添加后出现如下报错,地图缩放时位置产生偏移。

Uncaught TypeError: Cannot read properties of null (reading '_latLngToNewLayerPoint')

2. Leaflet.draw 绘制时将提示信息改为中文

解决方案

1.覆盖原来的 _animateZoom 方法

2.覆盖leaflet-draw默认的英文提示

完整代码

function configureDraw() { // 检查 Leaflet 是否已加载 if (typeof L === 'undefined' || !L.Tooltip || !L.Tooltip.prototype) { console.warn('Leaflet Tooltip 未加载,跳过 tooltip 缩放修复') return } // 保存原始方法(如果存在) const originalUpdatePosition = L.Tooltip.prototype._updatePosition L.Popup.prototype._animateZoom = function (e) { if (!this._map) { return } var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center), anchor = this._getAnchor() L.DomUtil.setPosition(this._container, pos.add(anchor)) } L.Marker.prototype._animateZoom = function (e) { if (!this._map) { return } var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center).round() this._setPos(pos) } L.Tooltip.prototype._animateZoom = function (e) { if (!this._map) { return } var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center) this._setPosition(pos) } // 覆盖 _updatePosition 方法 L.Tooltip.prototype._updatePosition = function () { if (!this._map) { return } try { let pos = this._map.latLngToLayerPoint(this._latlng) this._setPosition(pos) } catch (error) { console.warn('Tooltip _updatePosition 出错:', error) // 如果出错,尝试调用原始方法 if (originalUpdatePosition) { originalUpdatePosition.call(this) } } } if (!L.drawLocal) { console.warn('L.drawLocal 不可用,跳过本地化设置') return } // 设置绘制工具中文 L.drawLocal.draw = { toolbar: { actions: { title: '取消绘图', text: '取消', }, finish: { title: '完成绘图', text: '完成', }, undo: { title: '删除最后绘制的点', text: '删除最后的点', }, buttons: { polyline: '绘制线', polygon: '绘制多边形', rectangle: '绘制矩形', circle: '绘制圆形', marker: '绘制标记', circlemarker: '绘制圆形标记', }, }, handlers: { circle: { tooltip: { start: '单击并拖动以绘制圆' }, radius: '半径' }, simpleshape: { tooltip: { end: '释放鼠标完成绘图' } }, rectangle: { tooltip: { start: '单击并拖动以绘制矩形' } }, polyline: { tooltip: { start: '单击开始绘制线', cont: '单击以继续绘制线', end: '单击最后一点以结束线', }, error: '<strong>错误:</strong> 形状边缘不能交叉!', }, polygon: { tooltip: { start: '单击开始绘制形状', cont: '单击继续绘制形状', end: '点击第一个顶点完成绘制', }, error: '<strong>错误:</strong> 形状边缘不能交叉!', }, marker: { tooltip: { start: '单击地图以放置标记' } }, circlemarker: { tooltip: { start: '单击地图以放置圆标记' } }, }, } // 添加edit节本地化 L.drawLocal.edit = { toolbar: { actions: { save: { title: '保存更改', text: '保存' }, cancel: { title: '取消编辑,放弃所有更改', text: '取消' }, clearAll: { title: '清除所有图层', text: '清除所有' }, }, buttons: { edit: '编辑图层', editDisabled: '无图层可编辑', remove: '删除图层', removeDisabled: '无图层可删除', }, }, handlers: { edit: { tooltip: { text: '拖动控制点或标记来编辑', subtext: '点击取消撤销更改', }, }, remove: { tooltip: { text: '点击要删除的要素', }, }, }, } } configureDraw()

在leaflet和leaflet-draw之后引入即可

import L from 'leaflet' import 'leaflet-draw' import 'leaflet-draw/dist/leaflet.draw.css' import './drawer.js'
http://www.jsqmd.com/news/658417/

相关文章:

  • 告别手动拉群!企微关键词自动进群实战教程,引流转化翻倍
  • html如何修改备注
  • gprMax完整指南:从零开始掌握地质雷达电磁波仿真
  • SITS2026闭门会议纪要流出:生成算法合规红线已划定,3月1日起生效,你的模型过审了吗?
  • atsec成为EMVCo认可的安全评估实验室
  • (基于Arduino)ESP8266 EEPROM实战:从基础存储到智能设备配置的持久化方案
  • 下载数据集
  • Solon AI v3.13 发布(智能体开发框架,支持 Java8 到 Java26)
  • 如何用AI视频分析工具快速理解视频内容:完整指南
  • 【电子通识】是电子世界的“硬通货”——嵌入式工程师必懂的优先数系
  • 利用AI优化java系统入门和注意点
  • OpenClaw 技能太多不知道装哪个?按这份清单从上往下装就行
  • 如何设计一个支持“全文检索”的应用程序?
  • 使用Java代码,httpclient调用彩云天气接口-token版本
  • LangGraph 循环节点避坑:5个导致死循环的错误与终止条件设计
  • 超万张高清药片图像数据集助力智能医疗检测与识别算法研发
  • 基于STM32LXXX的模数转换芯片ADC(ADS1100A0IDBVR)驱动C程序设计
  • YAML配置介绍
  • OpenWRT插件编译避坑指南:如何将任意第三方插件集成到GitHub Actions工作流
  • Chapter 11: Physical Layer - Logical (Gen1 and Gen2)
  • PADS Layout在Pcb设计前的实用设置
  • Stardock Fences(桌面管理工具) 6.02
  • ceph子集群和rados
  • 基于STM32LXXX的模数转换芯片ADC(SGM58031XMS10G/TR)驱动C程序设计
  • 技术书籍推荐
  • Java 常见 Map 对比总结:HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap
  • 负载箱与电网质量的相互影响:用户应知的技术事实与应对策略
  • 深入RT-Thread BSP引擎:从Kconfig选项到SCons脚本,彻底搞懂STM32工程构建的里子
  • 图片去水印 API 哪个好?5种方案实测对比(附避坑指南 + 免费在线体验)
  • 杀疯了!Claude Opus 4.7 突袭发布,多项能力登顶第一