@ngx-google-maps-tk/markerclusterer
Version:
Angular Google Maps (AGM) extension for markerclusterer support
1 lines • 24.6 kB
Source Map (JSON)
{"version":3,"file":"ngx-google-maps-tk-markerclusterer.mjs","sources":["../../../packages/markerclusterer/src/lib/services/managers/cluster-manager.ts","../../../packages/markerclusterer/src/lib/directives/marker-cluster.ts","../../../packages/markerclusterer/src/lib/marker-clusterer.module.ts","../../../packages/markerclusterer/src/public-api.ts","../../../packages/markerclusterer/src/ngx-google-maps-tk-markerclusterer.ts"],"sourcesContent":["import { AgmMarker, GoogleMapsAPIWrapper, MarkerManager } from '@ngx-google-maps-tk/core';\nimport { Injectable, NgZone } from '@angular/core';\nimport { MarkerClustererOptions } from '@google/markerclustererplus';\nimport MarkerClusterer from '@google/markerclustererplus';\nimport { Observable, Subscriber } from 'rxjs';\nimport { AgmMarkerCluster } from '../../directives/marker-cluster';\n\n@Injectable()\nexport class ClusterManager extends MarkerManager {\n private _clustererInstance: Promise<MarkerClusterer>;\n private _resolver: (cluster: MarkerClusterer) => void;\n\n constructor(protected _mapsWrapper: GoogleMapsAPIWrapper, protected _zone: NgZone) {\n super(_mapsWrapper, _zone);\n this._clustererInstance = new Promise<MarkerClusterer>((resolver) => {\n this._resolver = resolver;\n });\n }\n\n init(options: MarkerClustererOptions): void {\n this._mapsWrapper.getNativeMap().then(map => {\n const clusterer = new MarkerClusterer(map, [], options);\n this._resolver(clusterer);\n });\n }\n\n getClustererInstance(): Promise<MarkerClusterer> {\n return this._clustererInstance;\n }\n\n addMarker(markerDirective: AgmMarker): void {\n const clusterPromise: Promise<MarkerClusterer> = this.getClustererInstance();\n const markerPromise = this._mapsWrapper\n .createMarker({\n position: {\n lat: markerDirective.latitude,\n lng: markerDirective.longitude,\n },\n label: markerDirective.label,\n draggable: markerDirective.draggable,\n icon: markerDirective.iconUrl,\n opacity: markerDirective.opacity,\n visible: markerDirective.visible,\n zIndex: markerDirective.zIndex,\n title: markerDirective.title,\n clickable: markerDirective.clickable,\n }, false);\n\n Promise\n .all([clusterPromise, markerPromise])\n .then(([cluster, marker]) => cluster.addMarker(marker));\n this._markers.set(markerDirective, markerPromise);\n }\n\n deleteMarker(marker: AgmMarker): Promise<void> {\n const markerPromise = this._markers.get(marker);\n if (markerPromise == null) {\n // marker already deleted\n return Promise.resolve();\n }\n return markerPromise.then((m: google.maps.Marker) => {\n this._zone.run(() => {\n m.setMap(null);\n this.getClustererInstance().then(cluster => {\n cluster.removeMarker(m);\n this._markers.delete(marker);\n });\n });\n });\n }\n\n clearMarkers(): Promise<void> {\n return this.getClustererInstance().then(cluster => {\n cluster.clearMarkers();\n });\n }\n\n setGridSize(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n cluster.setGridSize(c.gridSize);\n });\n }\n\n setMaxZoom(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n cluster.setMaxZoom(c.maxZoom);\n });\n }\n\n setStyles(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n cluster.setStyles(c.styles);\n });\n }\n\n setZoomOnClick(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n if (c.zoomOnClick !== undefined) {\n cluster.setZoomOnClick(c.zoomOnClick);\n }\n });\n }\n\n setAverageCenter(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n if (c.averageCenter !== undefined) {\n cluster.setAverageCenter(c.averageCenter);\n }\n });\n }\n\n setImagePath(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n if (c.imagePath !== undefined) {\n cluster.setImagePath(c.imagePath);\n }\n });\n }\n\n setMinimumClusterSize(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n if (c.minimumClusterSize !== undefined) {\n cluster.setMinimumClusterSize(c.minimumClusterSize);\n }\n });\n }\n\n setImageExtension(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n if (c.imageExtension !== undefined) {\n cluster.setImageExtension(c.imageExtension);\n }\n });\n }\n\n createClusterEventObservable<T>(eventName: string): Observable<T> {\n return new Observable((subscriber: Subscriber<T>) => {\n this._zone.runOutsideAngular(() => {\n this._clustererInstance.then((m: MarkerClusterer) => {\n m.addListener(eventName, (e: T) => this._zone.run(() => subscriber.next(e)));\n });\n });\n });\n }\n\n setCalculator(c: AgmMarkerCluster): void {\n this.getClustererInstance().then(cluster => {\n if (typeof c.calculator === 'function') {\n cluster.setCalculator(c.calculator);\n }\n });\n }\n\n async setClusterClass(c: AgmMarkerCluster) {\n if (typeof c.clusterClass !== 'undefined') {\n const instance = await this.getClustererInstance();\n instance.setClusterClass(c.clusterClass);\n }\n }\n\n async setEnableRetinaIcons(c: AgmMarkerCluster) {\n if (typeof c.enableRetinaIcons !== 'undefined') {\n const instance = await this.getClustererInstance();\n instance.setEnableRetinaIcons(c.enableRetinaIcons);\n }\n }\n\n async setIgnoreHidden(c: AgmMarkerCluster) {\n if (typeof c.ignoreHidden !== 'undefined') {\n const instance = await this.getClustererInstance();\n instance.setIgnoreHidden(c.ignoreHidden);\n }\n }\n\n async setImageSizes(c: AgmMarkerCluster) {\n if (typeof c.imageSizes !== 'undefined') {\n const instance = await this.getClustererInstance();\n instance.setImageSizes(c.imageSizes);\n }\n }\n\n async setTitle(c: AgmMarkerCluster) {\n if (typeof c.title !== 'undefined') {\n const instance = await this.getClustererInstance();\n instance.setTitle(c.title);\n }\n }\n}\n","import { Directive, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChange } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { InfoWindowManager, MarkerManager } from '@ngx-google-maps-tk/core';\nimport { ClusterIconStyle, MarkerClustererOptions } from '@google/markerclustererplus';\nimport { Calculator } from '@google/markerclustererplus/dist/markerclusterer';\nimport { ClusterManager } from '../services/managers/cluster-manager';\n\n// tslint:disable: jsdoc-format\n/**\n * AgmMarkerCluster clusters map marker if they are near together\n *\n * ### Example\n```typescript\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'my-map-cmp',\n styles: [`\n agm-map {\n height: 300px;\n }\n `],\n template: `\n <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n <agm-marker-cluster>\n <agm-marker [latitude]=\"lat\" [longitude]=\"lng\" [label]=\"'M'\">\n </agm-marker>\n <agm-marker [latitude]=\"lat2\" [longitude]=\"lng2\" [label]=\"'N'\">\n </agm-marker>\n </agm-marker-cluster>\n </agm-map>\n `\n})\n```\n */\n// tslint:enable: jsdoc-format\n@Directive({\n selector: 'agm-marker-cluster',\n providers: [\n ClusterManager,\n { provide: MarkerManager, useExisting: ClusterManager },\n InfoWindowManager,\n ],\n})\nexport class AgmMarkerCluster implements OnDestroy, OnChanges, OnInit, MarkerClustererOptions {\n /**\n * The grid size of a cluster in pixels\n */\n @Input() gridSize: number;\n\n /**\n * The maximum zoom level that a marker can be part of a cluster.\n */\n @Input() maxZoom: number;\n\n /**\n * Whether the default behaviour of clicking on a cluster is to zoom into it.\n */\n @Input() zoomOnClick: boolean;\n\n /**\n * Whether the center of each cluster should be the average of all markers in the cluster.\n */\n @Input() averageCenter: boolean;\n\n /**\n * The minimum number of markers to be in a cluster before the markers are hidden and a count is shown.\n */\n @Input() minimumClusterSize: number;\n\n /**\n * An object that has style properties.\n */\n @Input() styles: ClusterIconStyle[];\n\n /**\n * A function that calculates the cluster style and text based on the markers in the cluster.\n */\n @Input() calculator: Calculator;\n\n @Input() imagePath: string;\n @Input() imageExtension: string;\n\n /**\n * The name of the CSS class defining general styles for the cluster markers.\n * Use this class to define CSS styles that are not set up by the code that\n * processes the `styles` array.\n *\n * @defaultValue 'cluster'\n */\n @Input() clusterClass: string;\n\n /**\n * Whether to allow the use of cluster icons that have sizes that are some\n * multiple (typically double) of their actual display size. Icons such as\n * these look better when viewed on high-resolution monitors such as Apple's\n * Retina displays. Note: if this property is `true`, sprites cannot be used\n * as cluster icons.\n *\n * @defaultValue false\n */\n @Input() enableRetinaIcons: boolean;\n\n /**\n * Whether to ignore hidden markers in clusters. You may want to set this to\n * `true` to ensure that hidden markers are not included in the marker count\n * that appears on a cluster marker (this count is the value of the `text`\n * property of the result returned by the default `calculator`). If set to\n * `true` and you change the visibility of a marker being clustered, be sure\n * to also call `MarkerClusterer.repaint()`.\n *\n * @defaultValue false\n */\n @Input() ignoreHidden: boolean;\n\n /**\n * An array of numbers containing the widths of the group of\n * `<imagePath><n>.<imageExtension>` image files. (The images are assumed to\n * be square.)\n *\n * @defaultValue [53, 56, 66, 78, 90]\n */\n @Input() imageSizes: number[];\n\n /**\n * The tooltip to display when the mouse moves over a cluster marker.\n * (Alternatively, you can use a custom `calculator` function to specify a\n * different tooltip for each cluster marker.)\n *\n * @defaultValue ''\n */\n @Input() title: string;\n\n @Output() clusterClick: EventEmitter<void> = new EventEmitter<void>();\n\n private _observableSubscriptions: Subscription[] = [];\n\n constructor(private _clusterManager: ClusterManager) { }\n\n /** @internal */\n ngOnDestroy() {\n this._clusterManager.clearMarkers();\n this._observableSubscriptions.forEach((s) => s.unsubscribe());\n }\n\n /** @internal */\n ngOnChanges(changes: { [key: string]: SimpleChange }) {\n // tslint:disable: no-string-literal\n if (changes['gridSize']) {\n this._clusterManager.setGridSize(this);\n }\n if (changes['maxZoom']) {\n this._clusterManager.setMaxZoom(this);\n }\n if (changes['zoomOnClick']) {\n this._clusterManager.setZoomOnClick(this);\n }\n if (changes['averageCenter']) {\n this._clusterManager.setAverageCenter(this);\n }\n if (changes['minimumClusterSize']) {\n this._clusterManager.setMinimumClusterSize(this);\n }\n if (changes['imagePath']) {\n this._clusterManager.setImagePath(this);\n }\n if (changes['imageExtension']) {\n this._clusterManager.setImageExtension(this);\n }\n if (changes['calculator']) {\n this._clusterManager.setCalculator(this);\n }\n if (changes['styles']) {\n this._clusterManager.setStyles(this);\n }\n if (changes['clusterClass']) {\n this._clusterManager.setClusterClass(this);\n }\n if (changes['enableRetinaIcons']) {\n this._clusterManager.setEnableRetinaIcons(this);\n }\n if (changes['ignoreHidden']) {\n this._clusterManager.setIgnoreHidden(this);\n }\n if (changes['imageSizes']) {\n this._clusterManager.setImageSizes(this);\n }\n if (changes['title']) {\n this._clusterManager.setTitle(this);\n }\n // tslint:enable: no-string-literal\n\n }\n\n private _addEventListeners() {\n const handlers = [\n {\n name: 'clusterclick',\n handler: () => this.clusterClick.emit(),\n },\n ];\n handlers.forEach((obj) => {\n const os = this._clusterManager.createClusterEventObservable(obj.name).subscribe(obj.handler);\n this._observableSubscriptions.push(os);\n });\n }\n\n /** @internal */\n ngOnInit() {\n this._addEventListeners();\n this._clusterManager.init({\n averageCenter: this.averageCenter,\n calculator: this.calculator,\n clusterClass: this.clusterClass,\n enableRetinaIcons: this.enableRetinaIcons,\n gridSize: this.gridSize,\n ignoreHidden: this.ignoreHidden,\n imageExtension: this.imageExtension,\n imagePath: this.imagePath,\n imageSizes: this.imageSizes,\n maxZoom: this.maxZoom,\n minimumClusterSize: this.minimumClusterSize,\n styles: this.styles,\n title: this.title,\n zoomOnClick: this.zoomOnClick,\n });\n }\n}\n","import { AgmCoreModule } from '@ngx-google-maps-tk/core';\nimport { NgModule } from '@angular/core';\nimport { AgmMarkerCluster } from './directives/marker-cluster';\n\n@NgModule({\n imports: [AgmCoreModule],\n declarations: [AgmMarkerCluster],\n exports: [AgmMarkerCluster],\n})\nexport class AgmMarkerClustererModule {\n}\n","/*\n * Public API Surface of markerclusterer\n */\n\nexport * from './lib/services';\nexport * from './lib/directives';\nexport * from './lib/marker-clusterer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ClusterManager"],"mappings":"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"}