UNPKG

@thetsf/geofirex

Version:

Realtime Firestore GeoQueries with RxJS

60 lines (59 loc) 1.87 kB
"use strict"; 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); }