UNPKG

@agm/js-marker-clusterer

Version:

Angular Google Maps (AGM) extension for js-marker-clusterer support

145 lines 17.1 kB
import * as tslib_1 from "tslib"; import { Injectable, NgZone } from '@angular/core'; import { Observable } from 'rxjs'; import 'js-marker-clusterer'; import { AgmMarker, GoogleMapsAPIWrapper, MarkerManager } from '@agm/core'; let ClusterManager = class ClusterManager extends MarkerManager { constructor(_mapsWrapper, _zone) { super(_mapsWrapper, _zone); this._mapsWrapper = _mapsWrapper; this._zone = _zone; this._clustererInstance = new Promise((resolver) => { this._resolver = resolver; }); } init(options) { this._mapsWrapper.getNativeMap().then(map => { const clusterer = new MarkerClusterer(map, [], options); this._resolver(clusterer); }); } getClustererInstance() { return this._clustererInstance; } addMarker(marker) { const clusterPromise = this.getClustererInstance(); const markerPromise = this._mapsWrapper .createMarker({ position: { lat: marker.latitude, lng: marker.longitude, }, label: marker.label, draggable: marker.draggable, icon: marker.iconUrl, opacity: marker.opacity, visible: marker.visible, zIndex: marker.zIndex, title: marker.title, clickable: marker.clickable, }, false); Promise .all([clusterPromise, markerPromise]) .then(([cluster, marker]) => { return cluster.addMarker(marker); }); this._markers.set(marker, markerPromise); } deleteMarker(marker) { const m = this._markers.get(marker); if (m == null) { // marker already deleted return Promise.resolve(); } return m.then((m) => { this._zone.run(() => { m.setMap(null); this.getClustererInstance().then(cluster => { cluster.removeMarker(m); this._markers.delete(marker); }); }); }); } clearMarkers() { return this.getClustererInstance().then(cluster => { cluster.clearMarkers(); }); } setGridSize(c) { this.getClustererInstance().then(cluster => { cluster.setGridSize(c.gridSize); }); } setMaxZoom(c) { this.getClustererInstance().then(cluster => { cluster.setMaxZoom(c.maxZoom); }); } setStyles(c) { this.getClustererInstance().then(cluster => { cluster.setStyles(c.styles); }); } setZoomOnClick(c) { this.getClustererInstance().then(cluster => { if (c.zoomOnClick !== undefined) { cluster.zoomOnClick_ = c.zoomOnClick; } }); } setAverageCenter(c) { this.getClustererInstance().then(cluster => { if (c.averageCenter !== undefined) { cluster.averageCenter_ = c.averageCenter; } }); } setImagePath(c) { this.getClustererInstance().then(cluster => { if (c.imagePath !== undefined) { cluster.imagePath_ = c.imagePath; } }); } setMinimumClusterSize(c) { this.getClustererInstance().then(cluster => { if (c.minimumClusterSize !== undefined) { cluster.minimumClusterSize_ = c.minimumClusterSize; } }); } setImageExtension(c) { this.getClustererInstance().then(cluster => { if (c.imageExtension !== undefined) { cluster.imageExtension_ = c.imageExtension; } }); } createClusterEventObservable(eventName) { return Observable.create((observer) => { this._zone.runOutsideAngular(() => { this._clustererInstance.then((m) => { m.addListener(eventName, (e) => this._zone.run(() => observer.next(e))); }); }); }); } setCalculator(c) { this.getClustererInstance().then(cluster => { if (typeof c.calculator === 'function') { cluster.setCalculator(c.calculator); } }); } }; ClusterManager.ctorParameters = () => [ { type: GoogleMapsAPIWrapper }, { type: NgZone } ]; ClusterManager = tslib_1.__decorate([ Injectable(), tslib_1.__metadata("design:paramtypes", [GoogleMapsAPIWrapper, NgZone]) ], ClusterManager); export { ClusterManager }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFnbS9qcy1tYXJrZXItY2x1c3RlcmVyLyIsInNvdXJjZXMiOlsic2VydmljZXMvbWFuYWdlcnMvY2x1c3Rlci1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBRTVDLE9BQU8scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRM0UsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBZSxTQUFRLGFBQWE7SUFJL0MsWUFBc0IsWUFBa0MsRUFBWSxLQUFhO1FBQy9FLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFEUCxpQkFBWSxHQUFaLFlBQVksQ0FBc0I7UUFBWSxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBRS9FLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBMEIsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMxRSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBdUI7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFB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QUFVLEVBQUU7NkNBS3lCLG9CQUFvQixFQUFtQixNQUFNO0dBSnRFLGNBQWMsQ0FrSjFCO1NBbEpZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCAnanMtbWFya2VyLWNsdXN0ZXJlcic7XG5cbmltcG9ydCB7IEFnbU1hcmtlciwgR29vZ2xlTWFwc0FQSVdyYXBwZXIsIE1hcmtlck1hbmFnZXIgfSBmcm9tICdAYWdtL2NvcmUnO1xuaW1wb3J0IHsgTWFya2VyIH0gZnJvbSAnQGFnbS9jb3JlL3NlcnZpY2VzL2dvb2dsZS1tYXBzLXR5cGVzJztcbmltcG9ydCB7IEFnbU1hcmtlckNsdXN0ZXIgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL21hcmtlci1jbHVzdGVyJztcbmltcG9ydCB7IENsdXN0ZXJPcHRpb25zLCBNYXJrZXJDbHVzdGVyZXJJbnN0YW5jZSB9IGZyb20gJy4uL2dvb2dsZS1jbHVzdGVyZXItdHlwZXMnO1xuXG5kZWNsYXJlIHZhciBNYXJrZXJDbHVzdGVyZXI6IGFueTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENsdXN0ZXJNYW5hZ2VyIGV4dGVuZHMgTWFya2VyTWFuYWdlciB7XG4gIHByaXZhdGUgX2NsdXN0ZXJlckluc3RhbmNlOiBQcm9taXNlPE1hcmtlckNsdXN0ZXJlckluc3RhbmNlPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZXI6IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfbWFwc1dyYXBwZXI6IEdvb2dsZU1hcHNBUElXcmFwcGVyLCBwcm90ZWN0ZWQgX3pvbmU6IE5nWm9uZSkge1xuICAgIHN1cGVyKF9tYXBzV3JhcHBlciwgX3pvbmUpO1xuICAgIHRoaXMuX2NsdXN0ZXJlckluc3RhbmNlID0gbmV3IFByb21pc2U8TWFya2VyQ2x1c3RlcmVySW5zdGFuY2U+KChyZXNvbHZlcikgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQob3B0aW9uczogQ2x1c3Rlck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9tYXBzV3JhcHBlci5nZXROYXRpdmVNYXAoKS50aGVuKG1hcCA9PiB7XG4gICAgICBjb25zdCBjbHVzdGVyZXIgPSBuZXcgTWFya2VyQ2x1c3RlcmVyKG1hcCwgW10sIG9wdGlvbnMpO1xuICAgICAgdGhpcy5fcmVzb2x2ZXIoY2x1c3RlcmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENsdXN0ZXJlckluc3RhbmNlKCk6IFByb21pc2U8TWFya2VyQ2x1c3RlcmVySW5zdGFuY2U+IHtcbiAgICByZXR1cm4gdGhpcy5fY2x1c3RlcmVySW5zdGFuY2U7XG4gIH1cblxuICBhZGRNYXJrZXIobWFya2VyOiBBZ21NYXJrZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjbHVzdGVyUHJvbWlzZTogUHJvbWlzZTxNYXJrZXJDbHVzdGVyZXJJbnN0YW5jZT4gPSB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCk7XG4gICAgY29uc3QgbWFya2VyUHJvbWlzZSA9IHRoaXMuX21hcHNXcmFwcGVyXG4gICAgICAuY3JlYXRlTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IG1hcmtlci5sYXRpdHVkZSxcbiAgICAgICAgICBsbmc6IG1hcmtlci5sb25naXR1ZGUsXG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsOiBtYXJrZXIubGFiZWwsXG4gICAgICAgIGRyYWdnYWJsZTogbWFya2VyLmRyYWdnYWJsZSxcbiAgICAgICAgaWNvbjogbWFya2VyLmljb25VcmwsXG4gICAgICAgIG9wYWNpdHk6IG1hcmtlci5vcGFjaXR5LFxuICAgICAgICB2aXNpYmxlOiBtYXJrZXIudmlzaWJsZSxcbiAgICAgICAgekluZGV4OiBtYXJrZXIuekluZGV4LFxuICAgICAgICB0aXRsZTogbWFya2VyLnRpdGxlLFxuICAgICAgICBjbGlja2FibGU6IG1hcmtlci5jbGlja2FibGUsXG4gICAgICB9LCBmYWxzZSk7XG5cbiAgICBQcm9taXNlXG4gICAgICAuYWxsKFtjbHVzdGVyUHJvbWlzZSwgbWFya2VyUHJvbWlzZV0pXG4gICAgICAudGhlbigoW2NsdXN0ZXIsIG1hcmtlcl0pID0+IHtcbiAgICAgICAgcmV0dXJuIGNsdXN0ZXIuYWRkTWFya2VyKG1hcmtlcik7XG4gICAgICB9KTtcbiAgICB0aGlzLl9tYXJrZXJzLnNldChtYXJrZXIsIG1hcmtlclByb21pc2UpO1xuICB9XG5cbiAgZGVsZXRlTWFya2VyKG1hcmtlcjogQWdtTWFya2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbSA9IHRoaXMuX21hcmtlcnMuZ2V0KG1hcmtlcik7XG4gICAgaWYgKG0gPT0gbnVsbCkge1xuICAgICAgLy8gbWFya2VyIGFscmVhZHkgZGVsZXRlZFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbS50aGVuKChtOiBNYXJrZXIpID0+IHtcbiAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgbS5zZXRNYXAobnVsbCk7XG4gICAgICAgIHRoaXMuZ2V0Q2x1c3RlcmVySW5zdGFuY2UoKS50aGVuKGNsdXN0ZXIgPT4ge1xuICAgICAgICAgIGNsdXN0ZXIucmVtb3ZlTWFya2VyKG0pO1xuICAgICAgICAgIHRoaXMuX21hcmtlcnMuZGVsZXRlKG1hcmtlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhck1hcmtlcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2x1c3RlcmVySW5zdGFuY2UoKS50aGVuKGNsdXN0ZXIgPT4ge1xuICAgICAgY2x1c3Rlci5jbGVhck1hcmtlcnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEdyaWRTaXplKGM6IEFnbU1hcmtlckNsdXN0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcbiAgICAgIGNsdXN0ZXIuc2V0R3JpZFNpemUoYy5ncmlkU2l6ZSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRNYXhab29tKGM6IEFnbU1hcmtlckNsdXN0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcbiAgICAgIGNsdXN0ZXIuc2V0TWF4Wm9vbShjLm1heFpvb20pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U3R5bGVzKGM6IEFnbU1hcmtlckNsdXN0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcbiAgICAgIGNsdXN0ZXIuc2V0U3R5bGVzKGMuc3R5bGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFpvb21PbkNsaWNrKGM6IEFnbU1hcmtlckNsdXN0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcbiAgICAgIGlmIChjLnpvb21PbkNsaWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2x1c3Rlci56b29tT25DbGlja18gPSBjLnpvb21PbkNsaWNrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0QXZlcmFnZUNlbnRlcihjOiBBZ21NYXJrZXJDbHVzdGVyKTogdm9pZCB7XG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XG4gICAgICBpZiAoYy5hdmVyYWdlQ2VudGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2x1c3Rlci5hdmVyYWdlQ2VudGVyXyA9IGMuYXZlcmFnZUNlbnRlcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldEltYWdlUGF0aChjOiBBZ21NYXJrZXJDbHVzdGVyKTogdm9pZCB7XG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XG4gICAgICBpZiAoYy5pbWFnZVBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbHVzdGVyLmltYWdlUGF0aF8gPSBjLmltYWdlUGF0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldE1pbmltdW1DbHVzdGVyU2l6ZShjOiBBZ21NYXJrZXJDbHVzdGVyKTogdm9pZCB7XG4gICAgdGhpcy5nZXRDbHVzdGVyZXJJbnN0YW5jZSgpLnRoZW4oY2x1c3RlciA9PiB7XG4gICAgICBpZiAoYy5taW5pbXVtQ2x1c3RlclNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbHVzdGVyLm1pbmltdW1DbHVzdGVyU2l6ZV8gPSBjLm1pbmltdW1DbHVzdGVyU2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldEltYWdlRXh0ZW5zaW9uKGM6IEFnbU1hcmtlckNsdXN0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcbiAgICAgIGlmIChjLmltYWdlRXh0ZW5zaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2x1c3Rlci5pbWFnZUV4dGVuc2lvbl8gPSBjLmltYWdlRXh0ZW5zaW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlQ2x1c3RlckV2ZW50T2JzZXJ2YWJsZTxUPihldmVudE5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB7XG4gICAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2x1c3RlcmVySW5zdGFuY2UudGhlbigobTogTWFya2VyQ2x1c3RlcmVySW5zdGFuY2UpID0+IHtcbiAgICAgICAgICBtLmFkZExpc3RlbmVyKGV2ZW50TmFtZSwgKGU6IFQpID0+IHRoaXMuX3pvbmUucnVuKCgpID0+IG9ic2VydmVyLm5leHQoZSkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldENhbGN1bGF0b3IgKGM6IEFnbU1hcmtlckNsdXN0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdldENsdXN0ZXJlckluc3RhbmNlKCkudGhlbihjbHVzdGVyID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYy5jYWxjdWxhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNsdXN0ZXIuc2V0Q2FsY3VsYXRvcihjLmNhbGN1bGF0b3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=