源码分析之Leaflet中geo模块中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);
}

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jinuss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值