Jinuss's blog Jinuss's blog
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《Vue》
    • 《React》
    • 《Git》
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • 学习
  • 实用技巧
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

东流

前端可视化
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《Vue》
    • 《React》
    • 《Git》
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • 学习
  • 实用技巧
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 框架

  • core模块

  • dom模块

  • control

  • geometry

  • geo

    • crs

      • CRS
      • CRS.Earth
      • CRS.EPSG3395
      • CRS.EPSG3857
      • CRS.EPSG4326
      • CRS.Simple
    • projection

    • LatLng
      • 概述
      • 源码分析
        • 源码实现
      • 总结
    • LatLngBounds
  • layer

  • Map

  • 《Leaflet源码》笔记
  • geo
东流
2025-04-10
目录

LatLng

# 概述

Leaflet 中的 LatLng 类是用于表示地理坐标点的核心工具,常见于地图应用中,用于定位和操作地图上的位置。

# 源码分析

# 源码实现

LatLng.js 源码实现和介绍如下:

// `LatLng`构造函数,表示一个地理坐标点(纬度、经度、可选海拔)

export function LatLng(lat, lng, alt) {
  // alt单位一般是米
  if (isNaN(lat) || isNaN(lng)) {
    throw new Error("Invalid LatLng object: (" + lat + ", " + lng + ")");
  }

  this.lat = +lat;
  this.lng = +lng;
  if (alt !== undefined) {
    this.alt = +alt;
  }
}

// LatLng原型上定义方法
LatLng.prototype = {
  // 判断两个坐标是否相等,可设置最大误差范围
  equals: function (obj, maxMargin) {
    if (!obj) {
      return false;
    }

    obj = toLatLng(obj);

    var margin = Math.max(
      Math.abs(this.lat - obj.lat),
      Math.abs(this.lng - obj.lng)
    );

    return margin <= (maxMargin === undefined ? 1.0e-9 : maxMargin);
  },
  // 格式化坐标字符串,可选小数点精度,默认全部显示
  toString: function (precision) {
    return (
      "LatLng(" +
      Util.formatNum(this.lat, precision) +
      ", " +
      Util.formatNum(this.lng, precision) +
      ")"
    );
  },
  // 计算两坐标间的地球表面距离(基于`Earth`模块)
  distanceTo: function (other) {
    return Earth.distance(this, toLatLng(other));
  },

  // 生成以当前点为中心,边长为sizeInMeters 米的正方形地理近似范围
  wrap: function (sizeInMeters) {
    var latAccuracy = (180 * sizeInMeters) / 40075017, // 40075017米是地球赤道的长度
      lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);

    return toLatLngBounds(
      [this.lat - latAccuracy, this.lng - lngAccuracy],
      [this.lat + latAccuracy, this.lng + lngAccuracy]
    );
  },
  // 拷贝当前坐标对象
  clone: function () {
    return new LatLng(this.lat, this.lng, this.alt);
  },
};

// 灵活构造`LatLng`对象,将多种输入格式统一转换为`LatLng`实例
export function toLatLng(a, b, c) {
  if (a instanceof LatLng) {
    return a;
  }
  if (Util.isArray(a) && typeof a[0] !== "object") {
    if (a.length === 3) {
      return new LatLng(a[0], a[1], a[2]);
    }
    if (a.length === 2) {
      return new LatLng(a[0], a[1]);
    }
    return null;
  }
  if (a === undefined || a === null) {
    return a;
  }
  if (typeof a === "object" && "lat" in a) {
    return new LatLng(a.lat, "lng" in a ? a.lng : a.lon, a.alt);
  }
  if (b === undefined) {
    return null;
  }
  return new LatLng(a, b, c);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

# 总结

LatLng 类在 Leaflet 中是一个重要的基础类,用于表示和操作地理坐标点。它提供了一系列方法来处理坐标的加减乘除、取整、距离计算等操作,使得在地图应用中进行坐标计算和布局变得更加方便和高效。

编辑 (opens new window)
上次更新: 2025/04/18, 09:09:53
Projection.SphericalMercator
LatLngBounds

← Projection.SphericalMercator LatLngBounds→

最近更新
01
GeoJSON
05-08
02
Circle
04-15
03
CircleMarker
04-15
更多文章>
Theme by Vdoing | Copyright © 2024-2025 东流 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式