Leaflet点击重复显示的地图区域时返回无效经纬度坐标问题咨询
这不是Leaflet的bug,你遇到的坐标异常是Leaflet默认支持地图横向重复展示(低缩放层级下多份世界副本并排展示)的特性导致的:点击不同副本的相同地理位置时,返回的经度会叠加或减去360°的整数倍,因此会出现同一物理位置返回不同、超出±180°范围的无效坐标的情况。
Leaflet返回的Lng/Lat本身就是标准WGS84坐标系的GPS坐标,只需做简单处理就能得到你预期的结果,有两种常用解决方式:
方案1:限制地图仅展示单份世界副本
初始化地图时禁用跨世界拖动,同时限制可视范围在标准经纬度区间内:
L.map(name, { fullscreenControl: true, // 禁用拖动到其他世界副本时自动跳转到对应经度 worldCopyJump: false, // 限制可视范围为标准WGS84经纬度范围 maxBounds: [[-90, -180], [90, 180]] }).fitWorld().zoomIn().on("click", selectorConfirm);
方案2:对返回的经纬度做归一化处理
如果不需要限制地图拖动范围,只需要在点击回调里把经度归一化到[-180, 180]的标准区间即可:
function selectorConfirm(e) { let lng = e.latlng.lng; // 经度归一化逻辑,兼容正负值取模的异常问题 lng = ((lng + 180) % 360 + 360) % 360 - 180; const lat = e.latlng.lat; console.log('selected:'+lat+','+lng); }
内容的提问来源于stack exchange,提问作者hendr1x
相关产品推荐
相关产品推荐

