UNPKG

baqend

Version:

Baqend JavaScript SDK

132 lines 8.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GeoPoint = void 0; /** * Creates a new GeoPoint instance * From latitude and longitude * From a json object * Or an tuple of latitude and longitude */ var GeoPoint = /** @class */ (function () { /** * @param latitude A coordinate pair (latitude first), * a GeoPoint like object or the GeoPoint's latitude * @param longitude The GeoPoint's longitude */ function GeoPoint(latitude, longitude) { var lat; var lng; if (typeof latitude === 'string') { var index = latitude.indexOf(';'); lat = Number(latitude.substring(0, index)); lng = Number(latitude.substring(index + 1)); } else if (Array.isArray(latitude)) { lat = latitude[0], lng = latitude[1]; } else if (typeof latitude === 'object') { lat = latitude.latitude; lng = latitude.longitude; } else { lat = typeof latitude === 'number' ? latitude : 0; lng = typeof longitude === 'number' ? longitude : 0; } this.longitude = lng; this.latitude = lat; if (this.latitude < -90 || this.latitude > 90) { throw new Error("Latitude ".concat(this.latitude, " is not in bound of -90 <= latitude <= 90")); } if (this.longitude < -180 || this.longitude > 180) { throw new Error("Longitude ".concat(this.longitude, " is not in bound of -180 <= longitude <= 180")); } } /** * Creates a GeoPoint with the user's current location, if available. * @return A promise that will be resolved with a GeoPoint */ GeoPoint.current = function () { return new Promise((function (resolve, reject) { if (!navigator) { reject(new Error('This seems not to be a browser context.')); } if (!navigator.geolocation) { reject(new Error('This browser does not support geolocation.')); } navigator.geolocation.getCurrentPosition(function (location) { resolve(new GeoPoint(location.coords.latitude, location.coords.longitude)); }, function (error) { reject(error); }); })); }; /** * Returns the distance from this GeoPoint to another in kilometers. * @param point another GeoPoint * @return The distance in kilometers * * @see GeoPoint#radiansTo */ GeoPoint.prototype.kilometersTo = function (point) { return Number((GeoPoint.EARTH_RADIUS_IN_KILOMETERS * this.radiansTo(point)).toFixed(3)); }; /** * Returns the distance from this GeoPoint to another in miles. * @param point another GeoPoint * @return The distance in miles * * @see GeoPoint#radiansTo */ GeoPoint.prototype.milesTo = function (point) { return Number((GeoPoint.EARTH_RADIUS_IN_MILES * this.radiansTo(point)).toFixed(3)); }; /** * Computes the arc, in radian, between two WGS-84 positions. * * The haversine formula implementation is taken from: * {@link http://www.movable-type.co.uk/scripts/latlong.html} * * Returns the distance from this GeoPoint to another in radians. * @param point another GeoPoint * @return the arc, in radian, between two WGS-84 positions * * @see http://en.wikipedia.org/wiki/Haversine_formula */ GeoPoint.prototype.radiansTo = function (point) { var from = this; var to = point; var rad1 = from.latitude * GeoPoint.DEG_TO_RAD; var rad2 = to.latitude * GeoPoint.DEG_TO_RAD; var dLng = (to.longitude - from.longitude) * GeoPoint.DEG_TO_RAD; return Math.acos((Math.sin(rad1) * Math.sin(rad2)) + (Math.cos(rad1) * Math.cos(rad2) * Math.cos(dLng))); }; /** * A String representation in latitude, longitude format * @return The string representation of this class */ GeoPoint.prototype.toString = function () { return "".concat(this.latitude, ";").concat(this.longitude); }; /** * Returns a JSON representation of the GeoPoint * @return A GeoJson object of this GeoPoint */ GeoPoint.prototype.toJSON = function () { return { latitude: this.latitude, longitude: this.longitude }; }; /** * How many radians fit in one degree. */ GeoPoint.DEG_TO_RAD = Math.PI / 180; /** * The Earth radius in kilometers used by {@link GeoPoint#kilometersTo} */ GeoPoint.EARTH_RADIUS_IN_KILOMETERS = 6371; /** * The Earth radius in miles used by {@link GeoPoint#milesTo} */ GeoPoint.EARTH_RADIUS_IN_MILES = 3956; return GeoPoint; }()); exports.GeoPoint = GeoPoint; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VvUG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvR2VvUG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7Ozs7O0dBS0c7QUFDSDtJQStDRTs7OztPQUlHO0lBQ0gsa0JBQVksUUFBdUYsRUFDakcsU0FBa0I7UUFDbEIsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDaEMsSUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDM0MsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2pDLEdBQUcsR0FBUyxRQUFRLEdBQWpCLEVBQUUsR0FBRyxHQUFJLFFBQVEsR0FBWixDQUFhO1NBQ3ZCO2FBQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDdkMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDeEIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7U0FDMUI7YUFBTTtZQUNMLEdBQUcsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsR0FBRyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDckIs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