经纬志
首页 / Leaflet / API 文档

LatLng

先看结论

地理坐标对象,所有接受位置参数的 API 最终都会转成它。

最后验证 2026-11-03 · Leaflet 1.9.4 · 更新 2026-10-27 · 引用本文
L.latLng(lat, lng, alt?) → LatLng
L.latLng([lat, lng]) · L.latLng({lat, lng})

三种构造形式

写法示例说明
两个数字L.latLng(39.9, 116.4)最明确,推荐在计算代码里使用
数组L.latLng([39.9, 116.4])与大部分 Leaflet API 的入参一致
对象L.latLng({ lat: 39.9, lng: 116.4 })从 JSON 解析时常用

传入的已经是 LatLng 时,构造函数原样返回同一个对象,不做拷贝。 需要独立副本时用 latlng.clone(),否则修改一处会影响另一处。

属性

属性说明
lat纬度,−90 到 90
lng经度,−180 到 180(跨线时可能超出)
alt高程,可选,单位由数据源约定

方法

方法说明
equals(other, maxMargin?)比较经纬度,可给容差(度)
distanceTo(other)球面距离,单位米,基于球体近似
wrap()把经度折回 −180 到 180
toBounds(sizeInMeters)以该点为中心生成指定边长的范围
toString()输出 LatLng(39.9, 116.4)
clone()浅拷贝
var a = L.latLng(39.907359, 116.391263);
var b = L.latLng(39.914700, 116.410600);

console.log(a.distanceTo(b));        // 约 2360 米
console.log(a.toBounds(1000));       // 边长约 1 km 的矩形
console.log(L.latLng(10, 190).wrap()); // 经度折回 -170

distanceTo 用的是球面余弦公式。它把地球当作半径 6371000 米的球体, 短距离误差很小,跨洲长距离与椭球体结果会差千分之几。测绘级量算应在服务端完成。

LatLngBounds 范围对象

矩形范围用 L.latLngBounds(southWest, northEast) 表示, 也可以传一个坐标数组让它自动外扩。map.getBounds() 返回的就是这个类型。

方法说明
extend(latlng | bounds)扩大范围以包含新点
pad(ratio)按比例外扩,0.1 表示四周各扩 10%
contains(latlng | bounds)判断是否包含
intersects(other)判断是否相交
getCenter()中心点
getSouthWest() / getNorthEast()西南角、东北角
getSouth() 等四条边的纬度或经度
isValid()是否包含有效坐标
toBBoxString()输出 west,south,east,north,常用于 WMS 参数
var bounds = L.latLngBounds([[39.88, 116.30], [39.95, 116.48]]);
bounds.extend([40.00, 116.55]);

map.fitBounds(bounds, { padding: [20, 20] });

console.log(bounds.toBBoxString());

精度与判等

经纬度是双精度浮点数,直接 === 比较几乎总是不相等。 判断两点是否重合用 equals(other, 1e-6),容差单位是度。 显示坐标时按用途截断小数位:六位约 0.1 米,四位约 10 米,城市级展示四位足够。

跨 180° 经线

wrap() 只处理单个点的经度,不会修正两点之间的最短路径。 经度 179 与 −179 之间的实际距离约 222 公里,但朴素差值算出 358 度。 做距离或范围计算前,先把经度调整到同一侧,再计算。

引用本文

经纬志(2026)。《LatLng》。https://www.jingweizhi.com/leaflet/api/latlng.html(访问日期 2026-11-03)。