UNPKG

maplair

Version:

JavaScript library for mobile-friendly interactive maps

65 lines (64 loc) • 2.08 kB
import { formatNum } from "../core/Util.js"; import { LatLngBounds } from "./LatLngBounds.js"; import { EarthCRS } from "./crs/EarthCRS.js"; //#region src/geo/LatLng.js var LatLng = class LatLng { constructor(lat, lng, alt) { if (!LatLng.validate(lat, lng, alt)) throw new Error(`Invalid LatLng object: (${lat}, ${lng})`); let _lat, _lng, _alt; if (lat instanceof LatLng) { _lat = lat.lat; _lng = lat.lng; _alt = lat.alt; } else if (Array.isArray(lat) && typeof lat[0] !== "object") { if (lat.length === 3) { _lat = lat[0]; _lng = lat[1]; _alt = lat[2]; } else if (lat.length === 2) { _lat = lat[0]; _lng = lat[1]; } } else if (typeof lat === "object" && "lat" in lat) { _lat = lat.lat; _lng = "lng" in lat ? lat.lng : lat.lon; _alt = lat.alt; } else { _lat = lat; _lng = lng; _alt = alt; } this.lat = +_lat; this.lng = +_lng; if (_alt !== void 0) this.alt = +_alt; } static validate(lat, lng, alt) { if (lat instanceof LatLng || typeof lat === "object" && lat !== null && "lat" in lat) return true; else if (lat && Array.isArray(lat) && typeof lat[0] !== "object") { if (lat.length === 3 || lat.length === 2) return true; return false; } else if ((lat || lat === 0) && (lng || lng === 0)) return true; return false; } equals(obj, maxMargin) { if (!obj) return false; obj = new LatLng(obj); return Math.max(Math.abs(this.lat - obj.lat), Math.abs(this.lng - obj.lng)) <= (maxMargin ?? 1e-9); } toString(precision) { return `LatLng(${formatNum(this.lat, precision)}, ${formatNum(this.lng, precision)})`; } distanceTo(other) { return EarthCRS.distance(this, new LatLng(other)); } wrap() { return EarthCRS.wrapLatLng(this); } toBounds(sizeInMeters) { const latAccuracy = 180 * sizeInMeters / 40075017, lngAccuracy = latAccuracy / Math.cos(Math.PI / 180 * this.lat); return new LatLngBounds([this.lat - latAccuracy, this.lng - lngAccuracy], [this.lat + latAccuracy, this.lng + lngAccuracy]); } }; //#endregion export { LatLng }; //# sourceMappingURL=LatLng.js.map