maplair
Version:
JavaScript library for mobile-friendly interactive maps
65 lines (64 loc) • 2.08 kB
JavaScript
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