@thetsf/geofirex
Version:
Realtime Firestore GeoQueries with RxJS
60 lines (59 loc) • 1.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GeoFireClient = void 0;
exports.init = init;
const query_1 = require("./query");
const util_1 = require("./util");
const firestore_1 = require("firebase/firestore");
class GeoFireClient {
constructor(app) {
this.app = app;
}
/**
* Creates reference to a Firestore collection that can be used to make geoqueries
* @param {firestore.CollectionReference | firestore.Query | string} ref path to collection
* @returns {GeoFireQuery}
*/
query(ref) {
return new query_1.GeoFireQuery(this.app, ref);
}
/**
* Creates an object with a geohash. Save it to a field in Firestore to make geoqueries.
* @param {number} latitude
* @param {number} longitude
* @returns FirePoint
*/
point(latitude, longitude) {
return {
geopoint: new firestore_1.GeoPoint(latitude, longitude),
geohash: (0, util_1.encode)(latitude, longitude, 9)
};
}
/**
* Haversine distance between points
* @param {FirePoint} from
* @param {FirePoint} to
* @returns number
*/
distance(from, to) {
return (0, util_1.distance)([from.geopoint.latitude, from.geopoint.longitude], [to.geopoint.latitude, to.geopoint.longitude]);
}
/**
* Haversine bearing between points
* @param {FirePoint} from
* @param {FirePoint} to
* @returns number
*/
bearing(from, to) {
return (0, util_1.bearing)([from.geopoint.latitude, from.geopoint.longitude], [to.geopoint.latitude, to.geopoint.longitude]);
}
}
exports.GeoFireClient = GeoFireClient;
/**
* Initialize the library by passing it your Firebase app
* @param {FirebaseApp} app
* @returns GeoFireClient
*/
function init(app) {
return new GeoFireClient(app);
}