UNPKG

@agm/core

Version:

Angular components for Google Maps

55 lines 8.21 kB
import { Injectable } from '@angular/core'; import { BehaviorSubject, from, timer } from 'rxjs'; import { flatMap, map, sample, shareReplay, switchMap, } from 'rxjs/operators'; import { MapsAPILoader } from './maps-api-loader/maps-api-loader'; /** * Class to implement when you what to be able to make it work with the auto fit bounds feature * of AGM. */ export class FitBoundsAccessor { } /** * The FitBoundsService is responsible for computing the bounds of the a single map. */ export class FitBoundsService { constructor(loader) { this._boundsChangeSampleTime$ = new BehaviorSubject(200); this._includeInBounds$ = new BehaviorSubject(new Map()); this.bounds$ = from(loader.load()).pipe(flatMap(() => this._includeInBounds$), sample(this._boundsChangeSampleTime$.pipe(switchMap(time => timer(0, time)))), map(includeInBounds => this._generateBounds(includeInBounds)), shareReplay(1)); } _generateBounds(includeInBounds) { const bounds = new google.maps.LatLngBounds(); includeInBounds.forEach(b => bounds.extend(b)); return bounds; } addToBounds(latLng) { const id = this._createIdentifier(latLng); if (this._includeInBounds$.value.has(id)) { return; } const boundsMap = this._includeInBounds$.value; boundsMap.set(id, latLng); this._includeInBounds$.next(boundsMap); } removeFromBounds(latLng) { const boundsMap = this._includeInBounds$.value; boundsMap.delete(this._createIdentifier(latLng)); this._includeInBounds$.next(boundsMap); } changeFitBoundsChangeSampleTime(timeMs) { this._boundsChangeSampleTime$.next(timeMs); } getBounds$() { return this.bounds$; } _createIdentifier(latLng) { return `${latLng.lat}+${latLng.lng}`; } } FitBoundsService.decorators = [ { type: Injectable } ]; FitBoundsService.ctorParameters = () => [ { type: MapsAPILoader } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWJvdW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9maXQtYm91bmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsR0FBRyxFQUNILE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBV2xFOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsaUJBQWlCO0NBRXRDO0FBRUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQVksTUFBcUI7UUFIZCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQUM1RCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBWSxJQUFJLEdBQUcsRUFBMEQsQ0FBQyxDQUFDO1FBR3ZJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDckMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUNyQyxNQUFNLENBQ0osSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDdEUsRUFDRCxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQzdELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVPLGVBQWUsQ0FDckIsZUFBNEU7UUFFNUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFzRDtRQUNoRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN4QyxPQUFPO1NBQ1I7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQXNEO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDL0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxNQUFjO1FBQzVDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVTLGlCQUFpQixDQUFDLE1BQXNEO1FBQ2hGLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzs7WUFuREYsVUFBVTs7O1lBdEJGLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20sIE9ic2VydmFibGUsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBmbGF0TWFwLFxuICBtYXAsXG4gIHNhbXBsZSxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWFwc0FQSUxvYWRlciB9IGZyb20gJy4vbWFwcy1hcGktbG9hZGVyL21hcHMtYXBpLWxvYWRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRml0Qm91bmRzRGV0YWlscyB7XG4gIGxhdExuZzogZ29vZ2xlLm1hcHMuTGF0TG5nIHwgZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbDtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IHR5cGUgQm91bmRzTWFwID0gTWFwPHN0cmluZywgZ29vZ2xlLm1hcHMuTGF0TG5nIHwgZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbD47XG5cbi8qKlxuICogQ2xhc3MgdG8gaW1wbGVtZW50IHdoZW4geW91IHdoYXQgdG8gYmUgYWJsZSB0byBtYWtlIGl0IHdvcmsgd2l0aCB0aGUgYXV0byBmaXQgYm91bmRzIGZlYXR1cmVcbiAqIG9mIEFHTS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdEJvdW5kc0FjY2Vzc29yIHtcbiAgYWJzdHJhY3QgZ2V0Rml0Qm91bmRzRGV0YWlscyQoKTogT2JzZXJ2YWJsZTxGaXRCb3VuZHNEZXRhaWxzPjtcbn1cblxuLyoqXG4gKiBUaGUgRml0Qm91bmRzU2VydmljZSBpcyByZXNwb25zaWJsZSBmb3IgY29tcHV0aW5nIHRoZSBib3VuZHMgb2YgdGhlIGEgc2luZ2xlIG1hcC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpdEJvdW5kc1NlcnZpY2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYm91bmRzJDogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5MYXRMbmdCb3VuZHM+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2JvdW5kc0NoYW5nZVNhbXBsZVRpbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDIwMCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfaW5jbHVkZUluQm91bmRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Qm91bmRzTWFwPihuZXcgTWFwPHN0cmluZywgZ29vZ2xlLm1hcHMuTGF0TG5nIHwgZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbD4oKSk7XG5cbiAgY29uc3RydWN0b3IobG9hZGVyOiBNYXBzQVBJTG9hZGVyKSB7XG4gICAgdGhpcy5ib3VuZHMkID0gZnJvbShsb2FkZXIubG9hZCgpKS5waXBlKFxuICAgICAgZmxhdE1hcCgoKSA9PiB0aGlzLl9pbmNsdWRlSW5Cb3VuZHMkKSxcbiAgICAgIHNhbXBsZShcbiAgICAgICAgdGhpcy5fYm91bmRzQ2hhbmdlU2FtcGxlVGltZSQucGlwZShzd2l0Y2hNYXAodGltZSA9PiB0aW1lcigwLCB0aW1lKSkpLFxuICAgICAgKSxcbiAgICAgIG1hcChpbmNsdWRlSW5Cb3VuZHMgPT4gdGhpcy5fZ2VuZXJhdGVCb3VuZHMoaW5jbHVkZUluQm91bmRzKSksXG4gICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2VuZXJhdGVCb3VuZHMoXG4gICAgaW5jbHVkZUluQm91bmRzOiBNYXA8c3RyaW5nLCBnb29nbGUubWFwcy5MYXRMbmcgfCBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsPlxuICApIHtcbiAgICBjb25zdCBib3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7XG4gICAgaW5jbHVkZUluQm91bmRzLmZvckVhY2goYiA9PiBib3VuZHMuZXh0ZW5kKGIpKTtcbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgYWRkVG9Cb3VuZHMobGF0TG5nOiBnb29nbGUubWFwcy5MYXRMbmcgfCBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLl9jcmVhdGVJZGVudGlmaWVyKGxhdExuZyk7XG4gICAgaWYgKHRoaXMuX2luY2x1ZGVJbkJvdW5kcyQudmFsdWUuaGFzKGlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBib3VuZHNNYXAgPSB0aGlzLl9pbmNsdWRlSW5Cb3VuZHMkLnZhbHVlO1xuICAgIGJvdW5kc01hcC5zZXQoaWQsIGxhdExuZyk7XG4gICAgdGhpcy5faW5jbHVkZUluQm91bmRzJC5uZXh0KGJvdW5kc01hcCk7XG4gIH1cblxuICByZW1vdmVGcm9tQm91bmRzKGxhdExuZzogZ29vZ2xlLm1hcHMuTGF0TG5nIHwgZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCkge1xuICAgIGNvbnN0IGJvdW5kc01hcCA9IHRoaXMuX2luY2x1ZGVJbkJvdW5kcyQudmFsdWU7XG4gICAgYm91bmRzTWFwLmRlbGV0ZSh0aGlzLl9jcmVhdGVJZGVudGlmaWVyKGxhdExuZykpO1xuICAgIHRoaXMuX2luY2x1ZGVJbkJvdW5kcyQubmV4dChib3VuZHNNYXApO1xuICB9XG5cbiAgY2hhbmdlRml0Qm91bmRzQ2hhbmdlU2FtcGxlVGltZSh0aW1lTXM6IG51bWJlcikge1xuICAgIHRoaXMuX2JvdW5kc0NoYW5nZVNhbXBsZVRpbWUkLm5leHQodGltZU1zKTtcbiAgfVxuXG4gIGdldEJvdW5kcyQoKTogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5MYXRMbmdCb3VuZHM+IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMkO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jcmVhdGVJZGVudGlmaWVyKGxhdExuZzogZ29vZ2xlLm1hcHMuTGF0TG5nIHwgZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2xhdExuZy5sYXR9KyR7bGF0TG5nLmxuZ31gO1xuICB9XG59XG4iXX0=