首页 / Leaflet / API 文档
LatLng
先看结论
地理坐标对象,所有接受位置参数的 API 最终都会转成它。
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)。