baqend
Version:
Baqend JavaScript SDK
132 lines • 8.97 kB
JavaScript
;
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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