@react-google-maps/marker-clusterer 2.6.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs.js +40 -119
- package/dist/cjs.js.map +1 -1
- package/dist/cjs.min.js +1 -1
- package/dist/cjs.min.js.map +1 -1
- package/dist/esm.js +40 -119
- package/dist/esm.js.map +1 -1
- package/dist/esm.min.js +1 -1
- package/dist/esm.min.js.map +1 -1
- package/dist/index.d.ts +15 -16
- package/dist/umd.js +40 -119
- package/dist/umd.js.map +1 -1
- package/dist/umd.min.js +1 -1
- package/dist/umd.min.js.map +1 -1
- package/package.json +33 -25
- package/src/Cluster.tsx +0 -2
- package/src/ClusterIcon.tsx +34 -97
- package/src/Clusterer.tsx +2 -20
- package/src/__tests__/clusterer.test.ts +4 -0
- package/src/types.tsx +16 -16
package/dist/cjs.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cjs.min.js","sources":["../src/ClusterIcon.tsx","../src/Cluster.tsx","../src/Clusterer.tsx"],"sourcesContent":["/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Cluster } from './Cluster'\n\nimport { ClusterIconStyle, ClusterIconInfo } from './types'\n\nexport class ClusterIcon {\n cluster: Cluster\n className: string\n clusterClassName: string\n styles: ClusterIconStyle[]\n center: google.maps.LatLng | undefined\n div: HTMLDivElement | null\n sums: ClusterIconInfo | null\n visible: boolean\n url: string\n height: number\n width: number\n anchorText: number[]\n anchorIcon: number[]\n textColor: string\n textSize: number\n textDecoration: string\n fontWeight: string\n fontStyle: string\n fontFamily: string\n backgroundPosition: string\n\n boundsChangedListener: google.maps.MapsEventListener | null\n\n constructor(cluster: Cluster, styles: ClusterIconStyle[]) {\n cluster.getClusterer().extend(ClusterIcon, google.maps.OverlayView)\n this.cluster = cluster\n this.clusterClassName = this.cluster.getClusterer().getClusterClass()\n this.className = this.clusterClassName\n this.styles = styles\n this.center = undefined\n this.div = null\n this.sums = null\n this.visible = false\n this.boundsChangedListener = null\n this.url = ''\n this.height = 0\n this.width = 0\n this.anchorText = [0, 0]\n this.anchorIcon = [0, 0]\n this.textColor = 'black'\n this.textSize = 11\n this.textDecoration = 'none'\n this.fontWeight = 'bold'\n this.fontStyle = 'normal'\n this.fontFamily = 'Arial,sans-serif'\n this.backgroundPosition = '0 0'\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.setMap(cluster.getMap()) // Note: this causes onAdd to be called\n }\n\n onAdd() {\n let cMouseDownInCluster: boolean\n let cDraggingMapByCluster: boolean\n\n this.div = document.createElement('div')\n this.div.className = this.className\n if (this.visible) {\n this.show()\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getPanes().overlayMouseTarget.appendChild(this.div)\n\n // Fix for Issue 157\n this.boundsChangedListener = google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(),\n 'boundschanged',\n function boundsChanged() {\n cDraggingMapByCluster = cMouseDownInCluster\n }\n )\n\n google.maps.event.addDomListener(this.div, 'mousedown', function onMouseDown() {\n cMouseDownInCluster = true\n cDraggingMapByCluster = false\n })\n\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n google.maps.event.addDomListener(\n this.div,\n 'click',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n (event: Event) => {\n cMouseDownInCluster = false\n\n if (!cDraggingMapByCluster) {\n const markerClusterer = this.cluster.getClusterer()\n\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(markerClusterer, 'click', this.cluster)\n google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster) // deprecated name\n\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (markerClusterer.getZoomOnClick()) {\n // Zoom into the cluster.\n const maxZoom = markerClusterer.getMaxZoom()\n\n const bounds = this.cluster.getBounds()\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds)\n\n // There is a fix for Issue 170 here:\n setTimeout(function timeout() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds)\n\n // Don't zoom beyond the max zoom level\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n if (maxZoom !== null && markerClusterer.getMap().getZoom() > maxZoom) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer.getMap().setZoom(maxZoom + 1)\n }\n }, 100)\n }\n\n // Prevent event propagation to the map:\n event.cancelBubble = true\n\n if (event.stopPropagation) {\n event.stopPropagation()\n }\n }\n }\n )\n\n google.maps.event.addDomListener(\n this.div,\n 'mouseover',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseover', this.cluster)\n }\n )\n\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n google.maps.event.addDomListener(\n this.div,\n 'mouseout',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseout', this.cluster)\n }\n )\n }\n\n onRemove() {\n if (this.div && this.div.parentNode) {\n this.hide()\n\n if (this.boundsChangedListener !== null) {\n google.maps.event.removeListener(this.boundsChangedListener)\n }\n\n google.maps.event.clearInstanceListeners(this.div)\n\n this.div.parentNode.removeChild(this.div)\n\n this.div = null\n }\n }\n\n draw() {\n if (this.visible && this.div !== null && this.center) {\n const { x, y } = this.getPosFromLatLng(this.center)\n\n this.div.style.top = y + 'px'\n this.div.style.left = x + 'px'\n }\n }\n\n hide() {\n if (this.div) {\n this.div.style.display = 'none'\n }\n\n this.visible = false\n }\n\n show() {\n if (this.div && this.center) {\n let img = '',\n divTitle = ''\n\n // NOTE: values must be specified in px units\n const bp = this.backgroundPosition.split(' ')\n\n const spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, ''), 10)\n\n const spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, ''), 10)\n\n const pos = this.getPosFromLatLng(this.center)\n\n if (this.sums === null || typeof this.sums.title === 'undefined' || this.sums.title === '') {\n divTitle = this.cluster.getClusterer().getTitle()\n } else {\n divTitle = this.sums.title\n }\n\n this.div.style.cssText = this.createCss(pos)\n\n img =\n \"<img alt='\" +\n divTitle +\n \"' src='\" +\n this.url +\n \"' style='position: absolute; top: \" +\n spriteV +\n 'px; left: ' +\n spriteH +\n 'px; '\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n //@ts-ignore\n if (!this.cluster.getClusterer().enableRetinaIcons) {\n img +=\n 'clip: rect(' +\n -1 * spriteV +\n 'px, ' +\n (-1 * spriteH + this.width) +\n 'px, ' +\n (-1 * spriteV + this.height) +\n 'px, ' +\n -1 * spriteH +\n 'px);'\n }\n\n img += \"'>\"\n\n this.div.innerHTML =\n img +\n \"<div style='\" +\n 'position: absolute;' +\n 'top: ' +\n this.anchorText[0] +\n 'px;' +\n 'left: ' +\n this.anchorText[1] +\n 'px;' +\n 'color: ' +\n this.textColor +\n ';' +\n 'font-size: ' +\n this.textSize +\n 'px;' +\n 'font-family: ' +\n this.fontFamily +\n ';' +\n 'font-weight: ' +\n this.fontWeight +\n ';' +\n 'font-style: ' +\n this.fontStyle +\n ';' +\n 'text-decoration: ' +\n this.textDecoration +\n ';' +\n 'text-align: center;' +\n 'width: ' +\n this.width +\n 'px;' +\n 'line-height:' +\n this.height +\n 'px;' +\n \"'>\" +\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.sums.text +\n '</div>'\n\n this.div.title = divTitle\n\n this.div.style.display = ''\n }\n\n this.visible = true\n }\n\n useStyle(sums: ClusterIconInfo) {\n this.sums = sums\n const styles = this.cluster.getClusterer().getStyles()\n const style = styles[Math.min(styles.length - 1, Math.max(0, sums.index - 1))]\n\n this.url = style.url\n this.height = style.height\n this.width = style.width\n\n if (style.className) this.className = `${this.clusterClassName} ${style.className}`\n\n this.anchorText = style.anchorText || [0, 0]\n this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2]\n\n this.textColor = style.textColor || 'black'\n\n this.textSize = style.textSize || 11\n\n this.textDecoration = style.textDecoration || 'none'\n\n this.fontWeight = style.fontWeight || 'bold'\n\n this.fontStyle = style.fontStyle || 'normal'\n\n this.fontFamily = style.fontFamily || 'Arial,sans-serif'\n\n this.backgroundPosition = style.backgroundPosition || '0 0'\n }\n\n setCenter(center: google.maps.LatLng) {\n this.center = center\n }\n\n createCss(pos: google.maps.Point): string {\n const style = []\n\n style.push('cursor: pointer;')\n\n style.push('position: absolute; top: ' + pos.y + 'px; left: ' + pos.x + 'px;')\n\n style.push('width: ' + this.width + 'px; height: ' + this.height + 'px;')\n\n return style.join('')\n }\n\n getPosFromLatLng(latlng: google.maps.LatLng): google.maps.Point {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n const pos = this.getProjection().fromLatLngToDivPixel(latlng)\n\n pos.x -= this.anchorIcon[1]\n\n pos.y -= this.anchorIcon[0]\n\n // pos.x = pos.x\n\n // pos.y = pos.y\n\n return pos\n }\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Clusterer } from './Clusterer'\n\nimport { ClusterIcon } from './ClusterIcon'\n\nimport { MarkerExtended } from './types'\n\nexport class Cluster {\n markerClusterer: Clusterer\n map: google.maps.Map | google.maps.StreetViewPanorama\n gridSize: number\n minClusterSize: number\n averageCenter: boolean\n markers: MarkerExtended[]\n center: google.maps.LatLng | undefined\n bounds: google.maps.LatLngBounds | null\n clusterIcon: ClusterIcon\n\n constructor(markerClusterer: Clusterer) {\n this.markerClusterer = markerClusterer\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.map = this.markerClusterer.getMap()\n\n this.gridSize = this.markerClusterer.getGridSize()\n\n this.minClusterSize = this.markerClusterer.getMinimumClusterSize()\n\n this.averageCenter = this.markerClusterer.getAverageCenter()\n\n this.markers = []\n\n this.center = undefined\n\n this.bounds = null\n\n this.clusterIcon = new ClusterIcon(this, this.markerClusterer.getStyles())\n }\n\n getSize(): number {\n return this.markers.length\n }\n\n getMarkers(): MarkerExtended[] {\n return this.markers\n }\n\n getCenter(): google.maps.LatLng | undefined {\n return this.center\n }\n\n getMap(): google.maps.Map | google.maps.StreetViewPanorama {\n return this.map\n }\n\n getClusterer(): Clusterer {\n return this.markerClusterer\n }\n\n getBounds(): google.maps.LatLngBounds {\n const bounds = new google.maps.LatLngBounds(this.center, this.center)\n\n const markers = this.getMarkers()\n\n for (let i = 0; i < markers.length; i++) {\n const position = markers[i].getPosition()\n\n if (position) {\n bounds.extend(position)\n }\n }\n\n return bounds\n }\n\n remove() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.clusterIcon.setMap(null)\n\n this.markers = []\n\n // @ts-ignore\n delete this.markers\n }\n\n addMarker(marker: MarkerExtended): boolean {\n if (this.isMarkerAlreadyAdded(marker)) {\n return false\n }\n\n if (!this.center) {\n const position = marker.getPosition()\n\n if (position) {\n this.center = position\n\n this.calculateBounds()\n }\n } else {\n if (this.averageCenter) {\n const position = marker.getPosition()\n\n if (position) {\n const length = this.markers.length + 1\n\n this.center = new google.maps.LatLng(\n (this.center.lat() * (length - 1) + position.lat()) / length,\n (this.center.lng() * (length - 1) + position.lng()) / length\n )\n\n this.calculateBounds()\n }\n }\n }\n\n marker.isAdded = true\n\n this.markers.push(marker)\n\n const mCount = this.markers.length\n\n const maxZoom = this.markerClusterer.getMaxZoom()\n\n const zoom = this.map.getZoom()\n\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map)\n }\n } else if (mCount < this.minClusterSize) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map)\n }\n } else if (mCount === this.minClusterSize) {\n // Hide the markers that were showing.\n for (let i = 0; i < mCount; i++) {\n this.markers[i].setMap(null)\n }\n } else {\n marker.setMap(null)\n }\n\n return true\n }\n\n isMarkerInClusterBounds(marker: MarkerExtended): boolean {\n if (this.bounds !== null) {\n const position = marker.getPosition()\n\n if (position) {\n return this.bounds.contains(position)\n }\n }\n\n return false\n }\n\n calculateBounds() {\n this.bounds = this.markerClusterer.getExtendedBounds(\n new google.maps.LatLngBounds(this.center, this.center)\n )\n }\n\n updateIcon() {\n const mCount = this.markers.length\n\n const maxZoom = this.markerClusterer.getMaxZoom()\n\n const zoom = this.map.getZoom()\n\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n this.clusterIcon.hide()\n\n return\n }\n\n if (mCount < this.minClusterSize) {\n // Min cluster size not yet reached.\n this.clusterIcon.hide()\n\n return\n }\n\n if (this.center) {\n this.clusterIcon.setCenter(this.center)\n }\n\n this.clusterIcon.useStyle(\n this.markerClusterer.getCalculator()(this.markers, this.markerClusterer.getStyles().length)\n )\n\n this.clusterIcon.show()\n }\n\n isMarkerAlreadyAdded(marker: MarkerExtended): boolean {\n if (this.markers.includes) {\n return this.markers.includes(marker)\n } else {\n for (let i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n return true\n }\n }\n }\n\n return false\n }\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Cluster } from './Cluster'\n\nimport {\n MarkerExtended,\n ClustererOptions,\n ClusterIconStyle,\n TCalculator,\n ClusterIconInfo,\n} from './types'\n\n/**\n * Supports up to 9007199254740991 (Number.MAX_SAFE_INTEGER) markers\n * which is not a problem as max array length is 4294967296 (2**32)\n */\nconst CALCULATOR = function CALCULATOR(\n markers: MarkerExtended[],\n numStyles: number\n): ClusterIconInfo {\n const count = markers.length\n\n const numberOfDigits = count.toString().length\n\n const index = Math.min(numberOfDigits, numStyles)\n\n return {\n text: count.toString(),\n index: index,\n title: '',\n }\n}\n\nconst BATCH_SIZE = 2000\n\nconst BATCH_SIZE_IE = 500\n\nconst IMAGE_PATH =\n 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'\n\nconst IMAGE_EXTENSION = 'png'\n\nconst IMAGE_SIZES = [53, 56, 66, 78, 90]\n\nconst CLUSTERER_CLASS = 'cluster'\n\nexport class Clusterer {\n markers: MarkerExtended[]\n clusters: Cluster[]\n listeners: google.maps.MapsEventListener[]\n activeMap: google.maps.Map | google.maps.StreetViewPanorama | null\n ready: boolean\n gridSize: number\n minClusterSize: number\n maxZoom: number | null\n styles: ClusterIconStyle[]\n title: string\n zoomOnClick: boolean\n averageCenter: boolean\n ignoreHidden: boolean\n enableRetinaIcons: boolean\n imagePath: string\n imageExtension: string\n imageSizes: number[]\n calculator: TCalculator\n batchSize: number\n batchSizeIE: number\n clusterClass: string\n timerRefStatic: number | null\n\n constructor(\n map: google.maps.Map,\n optMarkers: MarkerExtended[] = [],\n optOptions: ClustererOptions = {}\n ) {\n this.extend(Clusterer, google.maps.OverlayView)\n\n this.markers = []\n this.clusters = []\n this.listeners = []\n this.activeMap = null\n this.ready = false\n this.gridSize = optOptions.gridSize || 60\n this.minClusterSize = optOptions.minimumClusterSize || 2\n this.maxZoom = optOptions.maxZoom || null\n this.styles = optOptions.styles || []\n\n this.title = optOptions.title || ''\n\n this.zoomOnClick = true\n\n if (optOptions.zoomOnClick !== undefined) {\n this.zoomOnClick = optOptions.zoomOnClick\n }\n\n this.averageCenter = false\n\n if (optOptions.averageCenter !== undefined) {\n this.averageCenter = optOptions.averageCenter\n }\n\n this.ignoreHidden = false\n\n if (optOptions.ignoreHidden !== undefined) {\n this.ignoreHidden = optOptions.ignoreHidden\n }\n\n this.enableRetinaIcons = false\n\n if (optOptions.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons = optOptions.enableRetinaIcons\n }\n this.imagePath = optOptions.imagePath || IMAGE_PATH\n\n this.imageExtension = optOptions.imageExtension || IMAGE_EXTENSION\n\n this.imageSizes = optOptions.imageSizes || IMAGE_SIZES\n\n this.calculator = optOptions.calculator || CALCULATOR\n\n this.batchSize = optOptions.batchSize || BATCH_SIZE\n\n this.batchSizeIE = optOptions.batchSizeIE || BATCH_SIZE_IE\n\n this.clusterClass = optOptions.clusterClass || CLUSTERER_CLASS\n\n if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize = this.batchSizeIE\n }\n\n this.timerRefStatic = null\n\n this.setupStyles()\n\n this.addMarkers(optMarkers, true)\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.setMap(map) // Note: this causes onAdd to be called\n }\n\n onAdd() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.activeMap = this.getMap()\n\n this.ready = true\n\n this.repaint()\n\n // Add the map event listeners\n this.listeners = [\n google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(),\n 'zoom_changed',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n this.resetViewport(false)\n // Workaround for this Google bug: when map is at level 0 and \"-\" of\n // zoom slider is clicked, a \"zoom_changed\" event is fired even though\n // the map doesn't zoom out any further. In this situation, no \"idle\"\n // event is triggered so the cluster markers that have been removed\n // do not get redrawn. Same goes for a zoom in at maxZoom.\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getZoom() === (this.get('minZoom') || 0) ||\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getZoom() === this.get('maxZoom')\n ) {\n google.maps.event.trigger(this, 'idle')\n }\n }\n ),\n google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(),\n 'idle',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n this.redraw()\n }\n ),\n ]\n }\n\n // eslint-disable-next-line @getify/proper-arrows/this\n onRemove() {\n // Put all the managed markers back on the map:\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].getMap() !== this.activeMap) {\n this.markers[i].setMap(this.activeMap)\n }\n }\n\n // Remove all clusters:\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove()\n }\n\n this.clusters = []\n\n // Remove map event listeners:\n for (let i = 0; i < this.listeners.length; i++) {\n google.maps.event.removeListener(this.listeners[i])\n }\n\n this.listeners = []\n\n this.activeMap = null\n\n this.ready = false\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n draw() {}\n\n setupStyles() {\n if (this.styles.length > 0) {\n return\n }\n\n for (let i = 0; i < this.imageSizes.length; i++) {\n this.styles.push({\n url: this.imagePath + (i + 1) + '.' + this.imageExtension,\n height: this.imageSizes[i],\n width: this.imageSizes[i],\n })\n }\n }\n\n fitMapToMarkers() {\n const markers = this.getMarkers()\n\n const bounds = new google.maps.LatLngBounds()\n\n for (let i = 0; i < markers.length; i++) {\n const position = markers[i].getPosition()\n if (position) {\n bounds.extend(position)\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().fitBounds(bounds)\n }\n\n getGridSize(): number {\n return this.gridSize\n }\n\n setGridSize(gridSize: number) {\n this.gridSize = gridSize\n }\n\n getMinimumClusterSize(): number {\n return this.minClusterSize\n }\n\n setMinimumClusterSize(minimumClusterSize: number) {\n this.minClusterSize = minimumClusterSize\n }\n\n getMaxZoom(): number | null {\n return this.maxZoom\n }\n\n setMaxZoom(maxZoom: number) {\n this.maxZoom = maxZoom\n }\n\n getStyles(): ClusterIconStyle[] {\n return this.styles\n }\n\n setStyles(styles: ClusterIconStyle[]) {\n this.styles = styles\n }\n\n getTitle(): string {\n return this.title\n }\n\n setTitle(title: string) {\n this.title = title\n }\n\n getZoomOnClick(): boolean {\n return this.zoomOnClick\n }\n\n setZoomOnClick(zoomOnClick: boolean) {\n this.zoomOnClick = zoomOnClick\n }\n\n getAverageCenter(): boolean {\n return this.averageCenter\n }\n\n setAverageCenter(averageCenter: boolean) {\n this.averageCenter = averageCenter\n }\n\n getIgnoreHidden(): boolean {\n return this.ignoreHidden\n }\n\n setIgnoreHidden(ignoreHidden: boolean) {\n this.ignoreHidden = ignoreHidden\n }\n\n getEnableRetinaIcons(): boolean {\n return this.enableRetinaIcons\n }\n\n setEnableRetinaIcons(enableRetinaIcons: boolean) {\n this.enableRetinaIcons = enableRetinaIcons\n }\n\n getImageExtension(): string {\n return this.imageExtension\n }\n\n setImageExtension(imageExtension: string) {\n this.imageExtension = imageExtension\n }\n\n getImagePath(): string {\n return this.imagePath\n }\n\n setImagePath(imagePath: string) {\n this.imagePath = imagePath\n }\n\n getImageSizes(): number[] {\n return this.imageSizes\n }\n\n setImageSizes(imageSizes: number[]) {\n this.imageSizes = imageSizes\n }\n\n getCalculator(): TCalculator {\n return this.calculator\n }\n\n setCalculator(calculator: TCalculator) {\n this.calculator = calculator\n }\n\n getBatchSizeIE(): number {\n return this.batchSizeIE\n }\n\n setBatchSizeIE(batchSizeIE: number) {\n this.batchSizeIE = batchSizeIE\n }\n\n getClusterClass(): string {\n return this.clusterClass\n }\n\n setClusterClass(clusterClass: string) {\n this.clusterClass = clusterClass\n }\n\n getMarkers(): MarkerExtended[] {\n return this.markers\n }\n\n getTotalMarkers(): number {\n return this.markers.length\n }\n\n getClusters(): Cluster[] {\n return this.clusters\n }\n\n getTotalClusters(): number {\n return this.clusters.length\n }\n\n addMarker(marker: MarkerExtended, optNoDraw: boolean) {\n this.pushMarkerTo(marker)\n\n if (!optNoDraw) {\n this.redraw()\n }\n }\n\n addMarkers(markers: MarkerExtended[], optNoDraw: boolean) {\n for (const key in markers) {\n if (markers.hasOwnProperty(key)) {\n this.pushMarkerTo(markers[key])\n }\n }\n\n if (!optNoDraw) {\n this.redraw()\n }\n }\n\n pushMarkerTo(marker: MarkerExtended) {\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n // eslint-disable-next-line @getify/proper-arrows/name, @getify/proper-arrows/this\n google.maps.event.addListener(marker, 'dragend', () => {\n if (this.ready) {\n marker.isAdded = false\n\n this.repaint()\n }\n })\n }\n\n marker.isAdded = false\n\n this.markers.push(marker)\n }\n\n removeMarker_(marker: MarkerExtended): boolean {\n let index = -1\n\n if (this.markers.indexOf) {\n index = this.markers.indexOf(marker)\n } else {\n for (let i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n index = i\n\n break\n }\n }\n }\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false\n }\n\n marker.setMap(null)\n\n this.markers.splice(index, 1) // Remove the marker from the list of managed markers\n\n return true\n }\n\n removeMarker(marker: MarkerExtended, optNoDraw: boolean): boolean {\n const removed = this.removeMarker_(marker)\n\n if (!optNoDraw && removed) {\n this.repaint()\n }\n\n return removed\n }\n\n removeMarkers(markers: MarkerExtended[], optNoDraw: boolean): boolean {\n let removed = false\n\n for (let i = 0; i < markers.length; i++) {\n removed = removed || this.removeMarker_(markers[i])\n }\n\n if (!optNoDraw && removed) {\n this.repaint()\n }\n\n return removed\n }\n\n clearMarkers() {\n this.resetViewport(true)\n\n this.markers = []\n }\n\n repaint() {\n const oldClusters = this.clusters.slice()\n\n this.clusters = []\n\n this.resetViewport(false)\n\n this.redraw()\n\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function timeout() {\n for (let i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove()\n }\n }, 0)\n }\n\n getExtendedBounds(bounds: google.maps.LatLngBounds): google.maps.LatLngBounds {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n const projection = this.getProjection()\n // Convert the points to pixels and the extend out by the grid size.\n const trPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng())\n )\n\n trPix.x += this.gridSize\n trPix.y -= this.gridSize\n\n const blPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng())\n )\n\n blPix.x -= this.gridSize\n blPix.y += this.gridSize\n\n // Extend the bounds to contain the new bounds.\n bounds.extend(\n // Convert the pixel points back to LatLng nw\n projection.fromDivPixelToLatLng(trPix)\n )\n\n bounds.extend(\n // Convert the pixel points back to LatLng sw\n projection.fromDivPixelToLatLng(blPix)\n )\n\n return bounds\n }\n\n redraw() {\n // Redraws all the clusters.\n this.createClusters(0)\n }\n\n resetViewport(optHide: boolean) {\n // Remove all the clusters\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove()\n }\n\n this.clusters = []\n\n // Reset the markers to not be added and to be removed from the map.\n for (let i = 0; i < this.markers.length; i++) {\n const marker = this.markers[i]\n\n marker.isAdded = false\n\n if (optHide) {\n marker.setMap(null)\n }\n }\n }\n\n distanceBetweenPoints(p1: google.maps.LatLng, p2: google.maps.LatLng): number {\n const R = 6371 // Radius of the Earth in km\n\n const dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180\n const dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180\n\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((p1.lat() * Math.PI) / 180) *\n Math.cos((p2.lat() * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n\n return R * (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)))\n }\n\n isMarkerInBounds(marker: MarkerExtended, bounds: google.maps.LatLngBounds): boolean {\n const position = marker.getPosition()\n\n if (position) {\n return bounds.contains(position)\n }\n\n return false\n }\n\n addToClosestCluster(marker: MarkerExtended) {\n let cluster\n\n let distance = 40000 // Some large number\n\n let clusterToAddTo = null\n\n for (let i = 0; i < this.clusters.length; i++) {\n cluster = this.clusters[i]\n\n const center = cluster.getCenter()\n\n const position = marker.getPosition()\n\n if (center && position) {\n const d = this.distanceBetweenPoints(center, position)\n\n if (d < distance) {\n distance = d\n\n clusterToAddTo = cluster\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker)\n } else {\n cluster = new Cluster(this)\n\n cluster.addMarker(marker)\n\n this.clusters.push(cluster)\n }\n }\n\n createClusters(iFirst: number) {\n if (!this.ready) {\n return\n }\n\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the <code>Clusterer</code> begins\n * clustering markers.\n * @name Clusterer#clusteringbegin\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringbegin', this)\n\n if (this.timerRefStatic !== null) {\n window.clearTimeout(this.timerRefStatic)\n\n // @ts-ignore\n delete this.timerRefStatic\n }\n }\n\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n const mapBounds =\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getZoom() > 3\n ? new google.maps.LatLngBounds(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getSouthWest(),\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getNorthEast()\n )\n : new google.maps.LatLngBounds(\n new google.maps.LatLng(85.02070771743472, -178.48388434375),\n new google.maps.LatLng(-85.08136444384544, 178.00048865625)\n )\n\n const bounds = this.getExtendedBounds(mapBounds)\n\n const iLast = Math.min(iFirst + this.batchSize, this.markers.length)\n\n for (let i = iFirst; i < iLast; i++) {\n const marker = this.markers[i]\n\n if (!marker.isAdded && this.isMarkerInBounds(marker, bounds)) {\n if (!this.ignoreHidden || (this.ignoreHidden && marker.getVisible())) {\n this.addToClosestCluster(marker)\n }\n }\n }\n\n if (iLast < this.markers.length) {\n this.timerRefStatic = window.setTimeout(\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n this.createClusters(iLast)\n },\n 0\n )\n } else {\n this.timerRefStatic = null\n\n /**\n * This event is fired when the <code>Clusterer</code> stops\n * clustering markers.\n * @name Clusterer#clusteringend\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringend', this)\n\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].updateIcon()\n }\n }\n }\n\n extend(obj1: any, obj2: any): any {\n return function applyExtend(object: any) {\n // eslint-disable-next-line guard-for-in\n for (const property in object.prototype) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.prototype[property] = object.prototype[property]\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n return this\n }.apply(obj1, [obj2])\n }\n}\n"],"names":["cluster","styles","getClusterer","extend","ClusterIcon","google","maps","OverlayView","this","clusterClassName","getClusterClass","className","center","undefined","div","sums","visible","boundsChangedListener","url","height","width","anchorText","anchorIcon","textColor","textSize","textDecoration","fontWeight","fontStyle","fontFamily","backgroundPosition","setMap","getMap","cMouseDownInCluster","cDraggingMapByCluster","document","createElement","show","getPanes","overlayMouseTarget","appendChild","event","addListener","addDomListener","markerClusterer_1","_this","trigger","getZoomOnClick","maxZoom_1","getMaxZoom","bounds_1","getBounds","fitBounds","setTimeout","getZoom","setZoom","cancelBubble","stopPropagation","parentNode","hide","removeListener","clearInstanceListeners","removeChild","_a","getPosFromLatLng","x","y","style","top","left","display","img","divTitle","bp","split","spriteH","parseInt","replace","spriteV","pos","title","getTitle","cssText","createCss","enableRetinaIcons","innerHTML","text","getStyles","Math","min","length","max","index","push","join","latlng","getProjection","fromLatLngToDivPixel","markerClusterer","map","gridSize","getGridSize","minClusterSize","getMinimumClusterSize","averageCenter","getAverageCenter","markers","bounds","clusterIcon","Cluster","LatLngBounds","getMarkers","i","position","getPosition","marker","isMarkerAlreadyAdded","length_1","LatLng","lat","lng","calculateBounds","isAdded","mCount","maxZoom","zoom","contains","getExtendedBounds","setCenter","useStyle","getCalculator","includes","CALCULATOR","numStyles","count","numberOfDigits","toString","IMAGE_SIZES","optMarkers","optOptions","Clusterer","clusters","listeners","activeMap","ready","minimumClusterSize","zoomOnClick","ignoreHidden","imagePath","imageExtension","imageSizes","calculator","batchSize","batchSizeIE","clusterClass","navigator","userAgent","toLowerCase","indexOf","timerRefStatic","setupStyles","addMarkers","repaint","resetViewport","get","redraw","remove","optNoDraw","pushMarkerTo","key","hasOwnProperty","getDraggable","splice","removed","removeMarker_","oldClusters","slice","projection","trPix","getNorthEast","blPix","getSouthWest","fromDivPixelToLatLng","createClusters","optHide","p1","p2","dLat","PI","dLon","a","sin","cos","atan2","sqrt","distance","clusterToAddTo","getCenter","d","distanceBetweenPoints","isMarkerInClusterBounds","addMarker","iFirst","window","clearTimeout","mapBounds","iLast","isMarkerInBounds","getVisible","addToClosestCluster","updateIcon","obj1","obj2","object","property","prototype","apply"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cjs.min.js","sources":["../src/ClusterIcon.tsx","../src/Cluster.tsx","../src/Clusterer.tsx"],"sourcesContent":["/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Cluster } from './Cluster'\n\nimport { ClusterIconStyle, ClusterIconInfo } from './types'\n\nexport class ClusterIcon {\n cluster: Cluster\n className: string\n clusterClassName: string\n styles: ClusterIconStyle[]\n center: google.maps.LatLng | undefined\n div: HTMLDivElement | null\n sums: ClusterIconInfo | null\n visible: boolean\n url: string\n height: number\n width: number\n anchorText: number[]\n anchorIcon: number[]\n textColor: string\n textSize: number\n textDecoration: string\n fontWeight: string\n fontStyle: string\n fontFamily: string\n backgroundPosition: string\n\n boundsChangedListener: google.maps.MapsEventListener | null\n\n constructor(cluster: Cluster, styles: ClusterIconStyle[]) {\n cluster.getClusterer().extend(ClusterIcon, google.maps.OverlayView)\n this.cluster = cluster\n this.clusterClassName = this.cluster.getClusterer().getClusterClass()\n this.className = this.clusterClassName\n this.styles = styles\n this.center = undefined\n this.div = null\n this.sums = null\n this.visible = false\n this.boundsChangedListener = null\n this.url = ''\n this.height = 0\n this.width = 0\n this.anchorText = [0, 0]\n this.anchorIcon = [0, 0]\n this.textColor = 'black'\n this.textSize = 11\n this.textDecoration = 'none'\n this.fontWeight = 'bold'\n this.fontStyle = 'normal'\n this.fontFamily = 'Arial,sans-serif'\n this.backgroundPosition = '0 0'\n // @ts-ignore\n this.setMap(cluster.getMap()) // Note: this causes onAdd to be called\n }\n\n onAdd() {\n let cMouseDownInCluster: boolean\n let cDraggingMapByCluster: boolean\n\n this.div = document.createElement('div')\n this.div.className = this.className\n if (this.visible) {\n this.show()\n }\n\n // @ts-ignore\n this.getPanes().overlayMouseTarget.appendChild(this.div)\n\n // Fix for Issue 157\n this.boundsChangedListener = google.maps.event.addListener(\n // @ts-ignore\n this.getMap(),\n 'boundschanged',\n function boundsChanged() {\n cDraggingMapByCluster = cMouseDownInCluster\n }\n )\n\n google.maps.event.addDomListener(this.div, 'mousedown', function onMouseDown() {\n cMouseDownInCluster = true\n cDraggingMapByCluster = false\n })\n\n google.maps.event.addDomListener(\n this.div,\n 'click',\n (event: Event) => {\n cMouseDownInCluster = false\n\n if (!cDraggingMapByCluster) {\n const markerClusterer = this.cluster.getClusterer()\n\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(markerClusterer, 'click', this.cluster)\n google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster) // deprecated name\n\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (markerClusterer.getZoomOnClick()) {\n // Zoom into the cluster.\n const maxZoom = markerClusterer.getMaxZoom()\n\n const bounds = this.cluster.getBounds()\n\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds)\n\n // There is a fix for Issue 170 here:\n setTimeout(function timeout() {\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds)\n\n // Don't zoom beyond the max zoom level\n // @ts-ignore\n if (maxZoom !== null && markerClusterer.getMap().getZoom() > maxZoom) {\n // @ts-ignore\n markerClusterer.getMap().setZoom(maxZoom + 1)\n }\n }, 100)\n }\n\n // Prevent event propagation to the map:\n event.cancelBubble = true\n\n if (event.stopPropagation) {\n event.stopPropagation()\n }\n }\n }\n )\n\n google.maps.event.addDomListener(\n this.div,\n 'mouseover',\n () => {\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseover', this.cluster)\n }\n )\n\n google.maps.event.addDomListener(\n this.div,\n 'mouseout',\n () => {\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseout', this.cluster)\n }\n )\n }\n\n onRemove() {\n if (this.div && this.div.parentNode) {\n this.hide()\n\n if (this.boundsChangedListener !== null) {\n google.maps.event.removeListener(this.boundsChangedListener)\n }\n\n google.maps.event.clearInstanceListeners(this.div)\n\n this.div.parentNode.removeChild(this.div)\n\n this.div = null\n }\n }\n\n draw() {\n if (this.visible && this.div !== null && this.center) {\n const { x, y } = this.getPosFromLatLng(this.center)\n\n this.div.style.top = y + 'px'\n this.div.style.left = x + 'px'\n }\n }\n\n hide() {\n if (this.div) {\n this.div.style.display = 'none'\n }\n\n this.visible = false\n }\n\n show() {\n if (this.div && this.center) {\n let divTitle = ''\n\n // NOTE: values must be specified in px units\n const bp = this.backgroundPosition.split(' ')\n\n const spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, ''), 10)\n const spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, ''), 10)\n\n const pos = this.getPosFromLatLng(this.center)\n\n if (this.sums === null || typeof this.sums.title === 'undefined' || this.sums.title === '') {\n divTitle = this.cluster.getClusterer().getTitle()\n } else {\n divTitle = this.sums.title\n }\n\n this.div.style.cursor = 'pointer'\n this.div.style.position = 'absolute'\n this.div.style.top = `${pos.y}px`\n this.div.style.left = `${pos.x}px`\n this.div.style.width = `${this.width}px`\n this.div.style.height = `${this.height}px`\n\n const img = document.createElement('img')\n img.alt = divTitle\n img.src = this.url\n img.style.position = 'absolute'\n img.style.top = `${spriteV}px`\n img.style.left = `${spriteH}px`\n\n if (!this.cluster.getClusterer().enableRetinaIcons) {\n img.style.clip = `rect(-${spriteV}px, -${spriteH + this.width}px, -${spriteV + this.height}, -${spriteH})`\n }\n\n const textElm = document.createElement('div')\n textElm.style.position = 'absolute'\n textElm.style.top = `${this.anchorText[0]}px`\n textElm.style.left = `${this.anchorText[1]}px`\n textElm.style.color = this.textColor\n textElm.style.fontSize = `${this.textSize}px`\n textElm.style.fontFamily = this.fontFamily\n textElm.style.fontWeight = this.fontWeight\n textElm.style.fontStyle = this.fontStyle\n textElm.style.textDecoration = this.textDecoration\n textElm.style.textAlign = 'center'\n textElm.style.width = `${this.width}px`\n textElm.style.lineHeight = `${this.height}px`\n textElm.innerText = `${this.sums?.text}`\n\n this.div.innerHTML = ''\n this.div.appendChild(img)\n this.div.appendChild(textElm)\n this.div.title = divTitle\n this.div.style.display = ''\n }\n\n this.visible = true\n }\n\n useStyle(sums: ClusterIconInfo) {\n this.sums = sums\n const styles = this.cluster.getClusterer().getStyles()\n const style = styles[Math.min(styles.length - 1, Math.max(0, sums.index - 1))]\n\n this.url = style.url\n this.height = style.height\n this.width = style.width\n\n if (style.className) this.className = `${this.clusterClassName} ${style.className}`\n\n this.anchorText = style.anchorText || [0, 0]\n this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2]\n\n this.textColor = style.textColor || 'black'\n\n this.textSize = style.textSize || 11\n\n this.textDecoration = style.textDecoration || 'none'\n\n this.fontWeight = style.fontWeight || 'bold'\n\n this.fontStyle = style.fontStyle || 'normal'\n\n this.fontFamily = style.fontFamily || 'Arial,sans-serif'\n\n this.backgroundPosition = style.backgroundPosition || '0 0'\n }\n\n setCenter(center: google.maps.LatLng) {\n this.center = center\n }\n\n getPosFromLatLng(latlng: google.maps.LatLng): google.maps.Point {\n // @ts-ignore\n const pos = this.getProjection().fromLatLngToDivPixel(latlng)\n\n pos.x -= this.anchorIcon[1]\n\n pos.y -= this.anchorIcon[0]\n\n // pos.x = pos.x\n\n // pos.y = pos.y\n\n return pos\n }\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Clusterer } from './Clusterer'\n\nimport { ClusterIcon } from './ClusterIcon'\n\nimport { MarkerExtended } from './types'\n\nexport class Cluster {\n markerClusterer: Clusterer\n map: google.maps.Map | google.maps.StreetViewPanorama\n gridSize: number\n minClusterSize: number\n averageCenter: boolean\n markers: MarkerExtended[]\n center: google.maps.LatLng | undefined\n bounds: google.maps.LatLngBounds | null\n clusterIcon: ClusterIcon\n\n constructor(markerClusterer: Clusterer) {\n this.markerClusterer = markerClusterer\n // @ts-ignore\n this.map = this.markerClusterer.getMap()\n\n this.gridSize = this.markerClusterer.getGridSize()\n\n this.minClusterSize = this.markerClusterer.getMinimumClusterSize()\n\n this.averageCenter = this.markerClusterer.getAverageCenter()\n\n this.markers = []\n\n this.center = undefined\n\n this.bounds = null\n\n this.clusterIcon = new ClusterIcon(this, this.markerClusterer.getStyles())\n }\n\n getSize(): number {\n return this.markers.length\n }\n\n getMarkers(): MarkerExtended[] {\n return this.markers\n }\n\n getCenter(): google.maps.LatLng | undefined {\n return this.center\n }\n\n getMap(): google.maps.Map | google.maps.StreetViewPanorama {\n return this.map\n }\n\n getClusterer(): Clusterer {\n return this.markerClusterer\n }\n\n getBounds(): google.maps.LatLngBounds {\n const bounds = new google.maps.LatLngBounds(this.center, this.center)\n\n const markers = this.getMarkers()\n\n for (let i = 0; i < markers.length; i++) {\n const position = markers[i].getPosition()\n\n if (position) {\n bounds.extend(position)\n }\n }\n\n return bounds\n }\n\n remove() {\n // @ts-ignore\n this.clusterIcon.setMap(null)\n\n this.markers = []\n\n // @ts-ignore\n delete this.markers\n }\n\n addMarker(marker: MarkerExtended): boolean {\n if (this.isMarkerAlreadyAdded(marker)) {\n return false\n }\n\n if (!this.center) {\n const position = marker.getPosition()\n\n if (position) {\n this.center = position\n\n this.calculateBounds()\n }\n } else {\n if (this.averageCenter) {\n const position = marker.getPosition()\n\n if (position) {\n const length = this.markers.length + 1\n\n this.center = new google.maps.LatLng(\n (this.center.lat() * (length - 1) + position.lat()) / length,\n (this.center.lng() * (length - 1) + position.lng()) / length\n )\n\n this.calculateBounds()\n }\n }\n }\n\n marker.isAdded = true\n\n this.markers.push(marker)\n\n const mCount = this.markers.length\n\n const maxZoom = this.markerClusterer.getMaxZoom()\n\n const zoom = this.map.getZoom()\n\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map)\n }\n } else if (mCount < this.minClusterSize) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map)\n }\n } else if (mCount === this.minClusterSize) {\n // Hide the markers that were showing.\n for (let i = 0; i < mCount; i++) {\n this.markers[i].setMap(null)\n }\n } else {\n marker.setMap(null)\n }\n\n return true\n }\n\n isMarkerInClusterBounds(marker: MarkerExtended): boolean {\n if (this.bounds !== null) {\n const position = marker.getPosition()\n\n if (position) {\n return this.bounds.contains(position)\n }\n }\n\n return false\n }\n\n calculateBounds() {\n this.bounds = this.markerClusterer.getExtendedBounds(\n new google.maps.LatLngBounds(this.center, this.center)\n )\n }\n\n updateIcon() {\n const mCount = this.markers.length\n\n const maxZoom = this.markerClusterer.getMaxZoom()\n\n const zoom = this.map.getZoom()\n\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n this.clusterIcon.hide()\n\n return\n }\n\n if (mCount < this.minClusterSize) {\n // Min cluster size not yet reached.\n this.clusterIcon.hide()\n\n return\n }\n\n if (this.center) {\n this.clusterIcon.setCenter(this.center)\n }\n\n this.clusterIcon.useStyle(\n this.markerClusterer.getCalculator()(this.markers, this.markerClusterer.getStyles().length)\n )\n\n this.clusterIcon.show()\n }\n\n isMarkerAlreadyAdded(marker: MarkerExtended): boolean {\n if (this.markers.includes) {\n return this.markers.includes(marker)\n } else {\n for (let i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n return true\n }\n }\n }\n\n return false\n }\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Cluster } from './Cluster'\n\nimport {\n MarkerExtended,\n ClustererOptions,\n ClusterIconStyle,\n TCalculator,\n ClusterIconInfo,\n} from './types'\n\n/**\n * Supports up to 9007199254740991 (Number.MAX_SAFE_INTEGER) markers\n * which is not a problem as max array length is 4294967296 (2**32)\n */\nconst CALCULATOR = function CALCULATOR(\n markers: MarkerExtended[],\n numStyles: number\n): ClusterIconInfo {\n const count = markers.length\n\n const numberOfDigits = count.toString().length\n\n const index = Math.min(numberOfDigits, numStyles)\n\n return {\n text: count.toString(),\n index,\n title: '',\n }\n}\n\nconst BATCH_SIZE = 2000\n\nconst BATCH_SIZE_IE = 500\n\nconst IMAGE_PATH =\n 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'\n\nconst IMAGE_EXTENSION = 'png'\n\nconst IMAGE_SIZES = [53, 56, 66, 78, 90]\n\nconst CLUSTERER_CLASS = 'cluster'\n\nexport class Clusterer {\n markers: MarkerExtended[]\n clusters: Cluster[]\n listeners: google.maps.MapsEventListener[]\n activeMap: google.maps.Map | google.maps.StreetViewPanorama | null\n ready: boolean\n gridSize: number\n minClusterSize: number\n maxZoom: number | null\n styles: ClusterIconStyle[]\n title: string\n zoomOnClick: boolean\n averageCenter: boolean\n ignoreHidden: boolean\n enableRetinaIcons: boolean\n imagePath: string\n imageExtension: string\n imageSizes: number[]\n calculator: TCalculator\n batchSize: number\n batchSizeIE: number\n clusterClass: string\n timerRefStatic: number | null\n\n constructor(\n map: google.maps.Map,\n optMarkers: MarkerExtended[] = [],\n optOptions: ClustererOptions = {}\n ) {\n this.extend(Clusterer, google.maps.OverlayView)\n\n this.markers = []\n this.clusters = []\n this.listeners = []\n this.activeMap = null\n this.ready = false\n this.gridSize = optOptions.gridSize || 60\n this.minClusterSize = optOptions.minimumClusterSize || 2\n this.maxZoom = optOptions.maxZoom || null\n this.styles = optOptions.styles || []\n\n this.title = optOptions.title || ''\n\n this.zoomOnClick = true\n\n if (optOptions.zoomOnClick !== undefined) {\n this.zoomOnClick = optOptions.zoomOnClick\n }\n\n this.averageCenter = false\n\n if (optOptions.averageCenter !== undefined) {\n this.averageCenter = optOptions.averageCenter\n }\n\n this.ignoreHidden = false\n\n if (optOptions.ignoreHidden !== undefined) {\n this.ignoreHidden = optOptions.ignoreHidden\n }\n\n this.enableRetinaIcons = false\n\n if (optOptions.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons = optOptions.enableRetinaIcons\n }\n this.imagePath = optOptions.imagePath || IMAGE_PATH\n\n this.imageExtension = optOptions.imageExtension || IMAGE_EXTENSION\n\n this.imageSizes = optOptions.imageSizes || IMAGE_SIZES\n\n this.calculator = optOptions.calculator || CALCULATOR\n\n this.batchSize = optOptions.batchSize || BATCH_SIZE\n\n this.batchSizeIE = optOptions.batchSizeIE || BATCH_SIZE_IE\n\n this.clusterClass = optOptions.clusterClass || CLUSTERER_CLASS\n\n if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize = this.batchSizeIE\n }\n\n this.timerRefStatic = null\n\n this.setupStyles()\n\n this.addMarkers(optMarkers, true)\n // @ts-ignore\n this.setMap(map) // Note: this causes onAdd to be called\n }\n\n onAdd() {\n // @ts-ignore\n this.activeMap = this.getMap()\n\n this.ready = true\n\n this.repaint()\n\n // Add the map event listeners\n this.listeners = [\n google.maps.event.addListener(\n // @ts-ignore\n this.getMap(),\n 'zoom_changed',\n () => {\n this.resetViewport(false)\n // Workaround for this Google bug: when map is at level 0 and \"-\" of\n // zoom slider is clicked, a \"zoom_changed\" event is fired even though\n // the map doesn't zoom out any further. In this situation, no \"idle\"\n // event is triggered so the cluster markers that have been removed\n // do not get redrawn. Same goes for a zoom in at maxZoom.\n if (\n // @ts-ignore\n this.getMap().getZoom() === (this.get('minZoom') || 0) ||\n // @ts-ignore\n this.getMap().getZoom() === this.get('maxZoom')\n ) {\n google.maps.event.trigger(this, 'idle')\n }\n }\n ),\n google.maps.event.addListener(\n // @ts-ignore\n this.getMap(),\n 'idle',\n () => {\n this.redraw()\n }\n ),\n ]\n }\n\n onRemove() {\n // Put all the managed markers back on the map:\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].getMap() !== this.activeMap) {\n this.markers[i].setMap(this.activeMap)\n }\n }\n\n // Remove all clusters:\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove()\n }\n\n this.clusters = []\n\n // Remove map event listeners:\n for (let i = 0; i < this.listeners.length; i++) {\n google.maps.event.removeListener(this.listeners[i])\n }\n\n this.listeners = []\n\n this.activeMap = null\n\n this.ready = false\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n draw() {}\n\n setupStyles() {\n if (this.styles.length > 0) {\n return\n }\n\n for (let i = 0; i < this.imageSizes.length; i++) {\n this.styles.push({\n url: this.imagePath + (i + 1) + '.' + this.imageExtension,\n height: this.imageSizes[i],\n width: this.imageSizes[i],\n })\n }\n }\n\n fitMapToMarkers() {\n const markers = this.getMarkers()\n\n const bounds = new google.maps.LatLngBounds()\n\n for (let i = 0; i < markers.length; i++) {\n const position = markers[i].getPosition()\n if (position) {\n bounds.extend(position)\n }\n }\n\n // @ts-ignore\n this.getMap().fitBounds(bounds)\n }\n\n getGridSize(): number {\n return this.gridSize\n }\n\n setGridSize(gridSize: number) {\n this.gridSize = gridSize\n }\n\n getMinimumClusterSize(): number {\n return this.minClusterSize\n }\n\n setMinimumClusterSize(minimumClusterSize: number) {\n this.minClusterSize = minimumClusterSize\n }\n\n getMaxZoom(): number | null {\n return this.maxZoom\n }\n\n setMaxZoom(maxZoom: number) {\n this.maxZoom = maxZoom\n }\n\n getStyles(): ClusterIconStyle[] {\n return this.styles\n }\n\n setStyles(styles: ClusterIconStyle[]) {\n this.styles = styles\n }\n\n getTitle(): string {\n return this.title\n }\n\n setTitle(title: string) {\n this.title = title\n }\n\n getZoomOnClick(): boolean {\n return this.zoomOnClick\n }\n\n setZoomOnClick(zoomOnClick: boolean) {\n this.zoomOnClick = zoomOnClick\n }\n\n getAverageCenter(): boolean {\n return this.averageCenter\n }\n\n setAverageCenter(averageCenter: boolean) {\n this.averageCenter = averageCenter\n }\n\n getIgnoreHidden(): boolean {\n return this.ignoreHidden\n }\n\n setIgnoreHidden(ignoreHidden: boolean) {\n this.ignoreHidden = ignoreHidden\n }\n\n getEnableRetinaIcons(): boolean {\n return this.enableRetinaIcons\n }\n\n setEnableRetinaIcons(enableRetinaIcons: boolean) {\n this.enableRetinaIcons = enableRetinaIcons\n }\n\n getImageExtension(): string {\n return this.imageExtension\n }\n\n setImageExtension(imageExtension: string) {\n this.imageExtension = imageExtension\n }\n\n getImagePath(): string {\n return this.imagePath\n }\n\n setImagePath(imagePath: string) {\n this.imagePath = imagePath\n }\n\n getImageSizes(): number[] {\n return this.imageSizes\n }\n\n setImageSizes(imageSizes: number[]) {\n this.imageSizes = imageSizes\n }\n\n getCalculator(): TCalculator {\n return this.calculator\n }\n\n setCalculator(calculator: TCalculator) {\n this.calculator = calculator\n }\n\n getBatchSizeIE(): number {\n return this.batchSizeIE\n }\n\n setBatchSizeIE(batchSizeIE: number) {\n this.batchSizeIE = batchSizeIE\n }\n\n getClusterClass(): string {\n return this.clusterClass\n }\n\n setClusterClass(clusterClass: string) {\n this.clusterClass = clusterClass\n }\n\n getMarkers(): MarkerExtended[] {\n return this.markers\n }\n\n getTotalMarkers(): number {\n return this.markers.length\n }\n\n getClusters(): Cluster[] {\n return this.clusters\n }\n\n getTotalClusters(): number {\n return this.clusters.length\n }\n\n addMarker(marker: MarkerExtended, optNoDraw: boolean) {\n this.pushMarkerTo(marker)\n\n if (!optNoDraw) {\n this.redraw()\n }\n }\n\n addMarkers(markers: MarkerExtended[], optNoDraw: boolean) {\n for (const key in markers) {\n if (Object.prototype.hasOwnProperty.call(markers, key)) {\n this.pushMarkerTo(markers[key])\n }\n }\n\n if (!optNoDraw) {\n this.redraw()\n }\n }\n\n pushMarkerTo(marker: MarkerExtended) {\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n google.maps.event.addListener(marker, 'dragend', () => {\n if (this.ready) {\n marker.isAdded = false\n\n this.repaint()\n }\n })\n }\n\n marker.isAdded = false\n\n this.markers.push(marker)\n }\n\n removeMarker_(marker: MarkerExtended): boolean {\n let index = -1\n\n if (this.markers.indexOf) {\n index = this.markers.indexOf(marker)\n } else {\n for (let i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n index = i\n\n break\n }\n }\n }\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false\n }\n\n marker.setMap(null)\n\n this.markers.splice(index, 1) // Remove the marker from the list of managed markers\n\n return true\n }\n\n removeMarker(marker: MarkerExtended, optNoDraw: boolean): boolean {\n const removed = this.removeMarker_(marker)\n\n if (!optNoDraw && removed) {\n this.repaint()\n }\n\n return removed\n }\n\n removeMarkers(markers: MarkerExtended[], optNoDraw: boolean): boolean {\n let removed = false\n\n for (let i = 0; i < markers.length; i++) {\n removed = removed || this.removeMarker_(markers[i])\n }\n\n if (!optNoDraw && removed) {\n this.repaint()\n }\n\n return removed\n }\n\n clearMarkers() {\n this.resetViewport(true)\n\n this.markers = []\n }\n\n repaint() {\n const oldClusters = this.clusters.slice()\n\n this.clusters = []\n\n this.resetViewport(false)\n\n this.redraw()\n\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function timeout() {\n for (let i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove()\n }\n }, 0)\n }\n\n getExtendedBounds(bounds: google.maps.LatLngBounds): google.maps.LatLngBounds {\n // @ts-ignore\n const projection = this.getProjection()\n // Convert the points to pixels and the extend out by the grid size.\n const trPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng())\n )\n\n trPix.x += this.gridSize\n trPix.y -= this.gridSize\n\n const blPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng())\n )\n\n blPix.x -= this.gridSize\n blPix.y += this.gridSize\n\n // Extend the bounds to contain the new bounds.\n bounds.extend(\n // Convert the pixel points back to LatLng nw\n projection.fromDivPixelToLatLng(trPix)\n )\n\n bounds.extend(\n // Convert the pixel points back to LatLng sw\n projection.fromDivPixelToLatLng(blPix)\n )\n\n return bounds\n }\n\n redraw() {\n // Redraws all the clusters.\n this.createClusters(0)\n }\n\n resetViewport(optHide: boolean) {\n // Remove all the clusters\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove()\n }\n\n this.clusters = []\n\n // Reset the markers to not be added and to be removed from the map.\n for (let i = 0; i < this.markers.length; i++) {\n const marker = this.markers[i]\n\n marker.isAdded = false\n\n if (optHide) {\n marker.setMap(null)\n }\n }\n }\n\n distanceBetweenPoints(p1: google.maps.LatLng, p2: google.maps.LatLng): number {\n const R = 6371 // Radius of the Earth in km\n\n const dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180\n const dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180\n\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((p1.lat() * Math.PI) / 180) *\n Math.cos((p2.lat() * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n\n return R * (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)))\n }\n\n isMarkerInBounds(marker: MarkerExtended, bounds: google.maps.LatLngBounds): boolean {\n const position = marker.getPosition()\n\n if (position) {\n return bounds.contains(position)\n }\n\n return false\n }\n\n addToClosestCluster(marker: MarkerExtended) {\n let cluster\n\n let distance = 40000 // Some large number\n\n let clusterToAddTo = null\n\n for (let i = 0; i < this.clusters.length; i++) {\n cluster = this.clusters[i]\n\n const center = cluster.getCenter()\n\n const position = marker.getPosition()\n\n if (center && position) {\n const d = this.distanceBetweenPoints(center, position)\n\n if (d < distance) {\n distance = d\n\n clusterToAddTo = cluster\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker)\n } else {\n cluster = new Cluster(this)\n\n cluster.addMarker(marker)\n\n this.clusters.push(cluster)\n }\n }\n\n createClusters(iFirst: number) {\n if (!this.ready) {\n return\n }\n\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the <code>Clusterer</code> begins\n * clustering markers.\n * @name Clusterer#clusteringbegin\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringbegin', this)\n\n if (this.timerRefStatic !== null) {\n window.clearTimeout(this.timerRefStatic)\n\n // @ts-ignore\n delete this.timerRefStatic\n }\n }\n\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n const mapBounds =\n // @ts-ignore\n this.getMap().getZoom() > 3\n ? new google.maps.LatLngBounds(\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getSouthWest(),\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getNorthEast()\n )\n : new google.maps.LatLngBounds(\n new google.maps.LatLng(85.02070771743472, -178.48388434375),\n new google.maps.LatLng(-85.08136444384544, 178.00048865625)\n )\n\n const bounds = this.getExtendedBounds(mapBounds)\n\n const iLast = Math.min(iFirst + this.batchSize, this.markers.length)\n\n for (let i = iFirst; i < iLast; i++) {\n const marker = this.markers[i]\n\n if (!marker.isAdded && this.isMarkerInBounds(marker, bounds)) {\n if (!this.ignoreHidden || (this.ignoreHidden && marker.getVisible())) {\n this.addToClosestCluster(marker)\n }\n }\n }\n\n if (iLast < this.markers.length) {\n this.timerRefStatic = window.setTimeout(\n () => {\n this.createClusters(iLast)\n },\n 0\n )\n } else {\n this.timerRefStatic = null\n\n /**\n * This event is fired when the <code>Clusterer</code> stops\n * clustering markers.\n * @name Clusterer#clusteringend\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringend', this)\n\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].updateIcon()\n }\n }\n }\n\n extend(obj1: any, obj2: any): any {\n return function applyExtend(object: any) {\n // eslint-disable-next-line guard-for-in\n for (const property in object.prototype) {\n // @ts-ignore\n this.prototype[property] = object.prototype[property]\n }\n\n // @ts-ignore\n return this\n }.apply(obj1, [obj2])\n }\n}\n"],"names":["ClusterIcon","cluster","styles","getClusterer","extend","google","maps","OverlayView","this","clusterClassName","getClusterClass","className","center","undefined","div","sums","visible","boundsChangedListener","url","height","width","anchorText","anchorIcon","textColor","textSize","textDecoration","fontWeight","fontStyle","fontFamily","backgroundPosition","setMap","getMap","prototype","onAdd","cMouseDownInCluster","cDraggingMapByCluster","_this","document","createElement","show","getPanes","overlayMouseTarget","appendChild","event","addListener","addDomListener","markerClusterer_1","trigger","getZoomOnClick","maxZoom_1","getMaxZoom","bounds_1","getBounds","fitBounds","setTimeout","getZoom","setZoom","cancelBubble","stopPropagation","onRemove","parentNode","hide","removeListener","clearInstanceListeners","removeChild","draw","_a","getPosFromLatLng","x","y","style","top","left","display","divTitle","bp","split","spriteH","parseInt","replace","spriteV","pos","title","getTitle","cursor","position","concat","img","alt","src","enableRetinaIcons","clip","textElm","color","fontSize","textAlign","lineHeight","innerText","text","innerHTML","useStyle","getStyles","Math","min","length","max","index","setCenter","latlng","getProjection","fromLatLngToDivPixel","Cluster","markerClusterer","map","gridSize","getGridSize","minClusterSize","getMinimumClusterSize","averageCenter","getAverageCenter","markers","bounds","clusterIcon","getSize","getMarkers","getCenter","LatLngBounds","i","getPosition","remove","addMarker","marker","isMarkerAlreadyAdded","length_1","LatLng","lat","lng","calculateBounds","isAdded","push","mCount","maxZoom","zoom","isMarkerInClusterBounds","contains","getExtendedBounds","updateIcon","getCalculator","includes","CALCULATOR","numStyles","count","numberOfDigits","toString","IMAGE_SIZES","Clusterer","optMarkers","optOptions","clusters","listeners","activeMap","ready","minimumClusterSize","zoomOnClick","ignoreHidden","imagePath","imageExtension","imageSizes","calculator","batchSize","batchSizeIE","clusterClass","navigator","userAgent","toLowerCase","indexOf","timerRefStatic","setupStyles","addMarkers","repaint","resetViewport","get","redraw","fitMapToMarkers","setGridSize","setMinimumClusterSize","setMaxZoom","setStyles","setTitle","setZoomOnClick","setAverageCenter","getIgnoreHidden","setIgnoreHidden","getEnableRetinaIcons","setEnableRetinaIcons","getImageExtension","setImageExtension","getImagePath","setImagePath","getImageSizes","setImageSizes","setCalculator","getBatchSizeIE","setBatchSizeIE","setClusterClass","getTotalMarkers","getClusters","getTotalClusters","optNoDraw","pushMarkerTo","key","Object","hasOwnProperty","call","getDraggable","removeMarker_","splice","removeMarker","removed","removeMarkers","clearMarkers","oldClusters","slice","projection","trPix","getNorthEast","blPix","getSouthWest","fromDivPixelToLatLng","createClusters","optHide","distanceBetweenPoints","p1","p2","dLat","PI","dLon","a","sin","cos","atan2","sqrt","isMarkerInBounds","addToClosestCluster","distance","clusterToAddTo","d","iFirst","window","clearTimeout","mapBounds","iLast","getVisible","obj1","obj2","object","property","apply"],"mappings":"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"}
|
package/dist/esm.js
CHANGED
|
@@ -22,7 +22,6 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
22
22
|
this.fontStyle = 'normal';
|
|
23
23
|
this.fontFamily = 'Arial,sans-serif';
|
|
24
24
|
this.backgroundPosition = '0 0';
|
|
25
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
26
25
|
// @ts-ignore
|
|
27
26
|
this.setMap(cluster.getMap()); // Note: this causes onAdd to be called
|
|
28
27
|
}
|
|
@@ -35,12 +34,10 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
35
34
|
if (this.visible) {
|
|
36
35
|
this.show();
|
|
37
36
|
}
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
39
37
|
// @ts-ignore
|
|
40
38
|
this.getPanes().overlayMouseTarget.appendChild(this.div);
|
|
41
39
|
// Fix for Issue 157
|
|
42
40
|
this.boundsChangedListener = google.maps.event.addListener(
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
44
41
|
// @ts-ignore
|
|
45
42
|
this.getMap(), 'boundschanged', function boundsChanged() {
|
|
46
43
|
cDraggingMapByCluster = cMouseDownInCluster;
|
|
@@ -49,10 +46,7 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
49
46
|
cMouseDownInCluster = true;
|
|
50
47
|
cDraggingMapByCluster = false;
|
|
51
48
|
});
|
|
52
|
-
|
|
53
|
-
google.maps.event.addDomListener(this.div, 'click',
|
|
54
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
55
|
-
function (event) {
|
|
49
|
+
google.maps.event.addDomListener(this.div, 'click', function (event) {
|
|
56
50
|
cMouseDownInCluster = false;
|
|
57
51
|
if (!cDraggingMapByCluster) {
|
|
58
52
|
var markerClusterer_1 = _this.cluster.getClusterer();
|
|
@@ -70,19 +64,15 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
70
64
|
// Zoom into the cluster.
|
|
71
65
|
var maxZoom_1 = markerClusterer_1.getMaxZoom();
|
|
72
66
|
var bounds_1 = _this.cluster.getBounds();
|
|
73
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
74
67
|
// @ts-ignore
|
|
75
68
|
markerClusterer_1.getMap().fitBounds(bounds_1);
|
|
76
69
|
// There is a fix for Issue 170 here:
|
|
77
70
|
setTimeout(function timeout() {
|
|
78
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
79
71
|
// @ts-ignore
|
|
80
72
|
markerClusterer_1.getMap().fitBounds(bounds_1);
|
|
81
73
|
// Don't zoom beyond the max zoom level
|
|
82
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
83
74
|
// @ts-ignore
|
|
84
75
|
if (maxZoom_1 !== null && markerClusterer_1.getMap().getZoom() > maxZoom_1) {
|
|
85
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
86
76
|
// @ts-ignore
|
|
87
77
|
markerClusterer_1.getMap().setZoom(maxZoom_1 + 1);
|
|
88
78
|
}
|
|
@@ -95,9 +85,7 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
95
85
|
}
|
|
96
86
|
}
|
|
97
87
|
});
|
|
98
|
-
google.maps.event.addDomListener(this.div, 'mouseover',
|
|
99
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
100
|
-
function () {
|
|
88
|
+
google.maps.event.addDomListener(this.div, 'mouseover', function () {
|
|
101
89
|
/**
|
|
102
90
|
* This event is fired when the mouse moves over a cluster marker.
|
|
103
91
|
* @name MarkerClusterer#mouseover
|
|
@@ -106,10 +94,7 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
106
94
|
*/
|
|
107
95
|
google.maps.event.trigger(_this.cluster.getClusterer(), 'mouseover', _this.cluster);
|
|
108
96
|
});
|
|
109
|
-
|
|
110
|
-
google.maps.event.addDomListener(this.div, 'mouseout',
|
|
111
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
112
|
-
function () {
|
|
97
|
+
google.maps.event.addDomListener(this.div, 'mouseout', function () {
|
|
113
98
|
/**
|
|
114
99
|
* This event is fired when the mouse moves out of a cluster marker.
|
|
115
100
|
* @name MarkerClusterer#mouseout
|
|
@@ -144,8 +129,9 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
144
129
|
this.visible = false;
|
|
145
130
|
};
|
|
146
131
|
ClusterIcon.prototype.show = function () {
|
|
132
|
+
var _a;
|
|
147
133
|
if (this.div && this.center) {
|
|
148
|
-
var
|
|
134
|
+
var divTitle = '';
|
|
149
135
|
// NOTE: values must be specified in px units
|
|
150
136
|
var bp = this.backgroundPosition.split(' ');
|
|
151
137
|
var spriteH = parseInt(bp[0].replace(/^\s+|\s+$/g, ''), 10);
|
|
@@ -157,72 +143,38 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
157
143
|
else {
|
|
158
144
|
divTitle = this.sums.title;
|
|
159
145
|
}
|
|
160
|
-
this.div.style.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
//@ts-ignore
|
|
146
|
+
this.div.style.cursor = 'pointer';
|
|
147
|
+
this.div.style.position = 'absolute';
|
|
148
|
+
this.div.style.top = "".concat(pos.y, "px");
|
|
149
|
+
this.div.style.left = "".concat(pos.x, "px");
|
|
150
|
+
this.div.style.width = "".concat(this.width, "px");
|
|
151
|
+
this.div.style.height = "".concat(this.height, "px");
|
|
152
|
+
var img = document.createElement('img');
|
|
153
|
+
img.alt = divTitle;
|
|
154
|
+
img.src = this.url;
|
|
155
|
+
img.style.position = 'absolute';
|
|
156
|
+
img.style.top = "".concat(spriteV, "px");
|
|
157
|
+
img.style.left = "".concat(spriteH, "px");
|
|
173
158
|
if (!this.cluster.getClusterer().enableRetinaIcons) {
|
|
174
|
-
img
|
|
175
|
-
'clip: rect(' +
|
|
176
|
-
-1 * spriteV +
|
|
177
|
-
'px, ' +
|
|
178
|
-
(-1 * spriteH + this.width) +
|
|
179
|
-
'px, ' +
|
|
180
|
-
(-1 * spriteV + this.height) +
|
|
181
|
-
'px, ' +
|
|
182
|
-
-1 * spriteH +
|
|
183
|
-
'px);';
|
|
159
|
+
img.style.clip = "rect(-".concat(spriteV, "px, -").concat(spriteH + this.width, "px, -").concat(spriteV + this.height, ", -").concat(spriteH, ")");
|
|
184
160
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
'font-family: ' +
|
|
203
|
-
this.fontFamily +
|
|
204
|
-
';' +
|
|
205
|
-
'font-weight: ' +
|
|
206
|
-
this.fontWeight +
|
|
207
|
-
';' +
|
|
208
|
-
'font-style: ' +
|
|
209
|
-
this.fontStyle +
|
|
210
|
-
';' +
|
|
211
|
-
'text-decoration: ' +
|
|
212
|
-
this.textDecoration +
|
|
213
|
-
';' +
|
|
214
|
-
'text-align: center;' +
|
|
215
|
-
'width: ' +
|
|
216
|
-
this.width +
|
|
217
|
-
'px;' +
|
|
218
|
-
'line-height:' +
|
|
219
|
-
this.height +
|
|
220
|
-
'px;' +
|
|
221
|
-
"'>" +
|
|
222
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
223
|
-
// @ts-ignore
|
|
224
|
-
this.sums.text +
|
|
225
|
-
'</div>';
|
|
161
|
+
var textElm = document.createElement('div');
|
|
162
|
+
textElm.style.position = 'absolute';
|
|
163
|
+
textElm.style.top = "".concat(this.anchorText[0], "px");
|
|
164
|
+
textElm.style.left = "".concat(this.anchorText[1], "px");
|
|
165
|
+
textElm.style.color = this.textColor;
|
|
166
|
+
textElm.style.fontSize = "".concat(this.textSize, "px");
|
|
167
|
+
textElm.style.fontFamily = this.fontFamily;
|
|
168
|
+
textElm.style.fontWeight = this.fontWeight;
|
|
169
|
+
textElm.style.fontStyle = this.fontStyle;
|
|
170
|
+
textElm.style.textDecoration = this.textDecoration;
|
|
171
|
+
textElm.style.textAlign = 'center';
|
|
172
|
+
textElm.style.width = "".concat(this.width, "px");
|
|
173
|
+
textElm.style.lineHeight = "".concat(this.height, "px");
|
|
174
|
+
textElm.innerText = "".concat((_a = this.sums) === null || _a === void 0 ? void 0 : _a.text);
|
|
175
|
+
this.div.innerHTML = '';
|
|
176
|
+
this.div.appendChild(img);
|
|
177
|
+
this.div.appendChild(textElm);
|
|
226
178
|
this.div.title = divTitle;
|
|
227
179
|
this.div.style.display = '';
|
|
228
180
|
}
|
|
@@ -236,7 +188,7 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
236
188
|
this.height = style.height;
|
|
237
189
|
this.width = style.width;
|
|
238
190
|
if (style.className)
|
|
239
|
-
this.className = this.clusterClassName
|
|
191
|
+
this.className = "".concat(this.clusterClassName, " ").concat(style.className);
|
|
240
192
|
this.anchorText = style.anchorText || [0, 0];
|
|
241
193
|
this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2];
|
|
242
194
|
this.textColor = style.textColor || 'black';
|
|
@@ -250,15 +202,7 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
250
202
|
ClusterIcon.prototype.setCenter = function (center) {
|
|
251
203
|
this.center = center;
|
|
252
204
|
};
|
|
253
|
-
ClusterIcon.prototype.createCss = function (pos) {
|
|
254
|
-
var style = [];
|
|
255
|
-
style.push('cursor: pointer;');
|
|
256
|
-
style.push('position: absolute; top: ' + pos.y + 'px; left: ' + pos.x + 'px;');
|
|
257
|
-
style.push('width: ' + this.width + 'px; height: ' + this.height + 'px;');
|
|
258
|
-
return style.join('');
|
|
259
|
-
};
|
|
260
205
|
ClusterIcon.prototype.getPosFromLatLng = function (latlng) {
|
|
261
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
262
206
|
// @ts-ignore
|
|
263
207
|
var pos = this.getProjection().fromLatLngToDivPixel(latlng);
|
|
264
208
|
pos.x -= this.anchorIcon[1];
|
|
@@ -273,7 +217,6 @@ var ClusterIcon = /** @class */ (function () {
|
|
|
273
217
|
var Cluster = /** @class */ (function () {
|
|
274
218
|
function Cluster(markerClusterer) {
|
|
275
219
|
this.markerClusterer = markerClusterer;
|
|
276
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
277
220
|
// @ts-ignore
|
|
278
221
|
this.map = this.markerClusterer.getMap();
|
|
279
222
|
this.gridSize = this.markerClusterer.getGridSize();
|
|
@@ -311,7 +254,6 @@ var Cluster = /** @class */ (function () {
|
|
|
311
254
|
return bounds;
|
|
312
255
|
};
|
|
313
256
|
Cluster.prototype.remove = function () {
|
|
314
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
315
257
|
// @ts-ignore
|
|
316
258
|
this.clusterIcon.setMap(null);
|
|
317
259
|
this.markers = [];
|
|
@@ -480,13 +422,11 @@ var Clusterer = /** @class */ (function () {
|
|
|
480
422
|
this.timerRefStatic = null;
|
|
481
423
|
this.setupStyles();
|
|
482
424
|
this.addMarkers(optMarkers, true);
|
|
483
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
484
425
|
// @ts-ignore
|
|
485
426
|
this.setMap(map); // Note: this causes onAdd to be called
|
|
486
427
|
}
|
|
487
428
|
Clusterer.prototype.onAdd = function () {
|
|
488
429
|
var _this = this;
|
|
489
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
490
430
|
// @ts-ignore
|
|
491
431
|
this.activeMap = this.getMap();
|
|
492
432
|
this.ready = true;
|
|
@@ -494,11 +434,8 @@ var Clusterer = /** @class */ (function () {
|
|
|
494
434
|
// Add the map event listeners
|
|
495
435
|
this.listeners = [
|
|
496
436
|
google.maps.event.addListener(
|
|
497
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
498
437
|
// @ts-ignore
|
|
499
|
-
this.getMap(), 'zoom_changed',
|
|
500
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
501
|
-
function () {
|
|
438
|
+
this.getMap(), 'zoom_changed', function () {
|
|
502
439
|
_this.resetViewport(false);
|
|
503
440
|
// Workaround for this Google bug: when map is at level 0 and "-" of
|
|
504
441
|
// zoom slider is clicked, a "zoom_changed" event is fired even though
|
|
@@ -506,26 +443,20 @@ var Clusterer = /** @class */ (function () {
|
|
|
506
443
|
// event is triggered so the cluster markers that have been removed
|
|
507
444
|
// do not get redrawn. Same goes for a zoom in at maxZoom.
|
|
508
445
|
if (
|
|
509
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
510
446
|
// @ts-ignore
|
|
511
447
|
_this.getMap().getZoom() === (_this.get('minZoom') || 0) ||
|
|
512
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
513
448
|
// @ts-ignore
|
|
514
449
|
_this.getMap().getZoom() === _this.get('maxZoom')) {
|
|
515
450
|
google.maps.event.trigger(_this, 'idle');
|
|
516
451
|
}
|
|
517
452
|
}),
|
|
518
453
|
google.maps.event.addListener(
|
|
519
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
520
454
|
// @ts-ignore
|
|
521
|
-
this.getMap(), 'idle',
|
|
522
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
523
|
-
function () {
|
|
455
|
+
this.getMap(), 'idle', function () {
|
|
524
456
|
_this.redraw();
|
|
525
457
|
}),
|
|
526
458
|
];
|
|
527
459
|
};
|
|
528
|
-
// eslint-disable-next-line @getify/proper-arrows/this
|
|
529
460
|
Clusterer.prototype.onRemove = function () {
|
|
530
461
|
// Put all the managed markers back on the map:
|
|
531
462
|
for (var i = 0; i < this.markers.length; i++) {
|
|
@@ -569,7 +500,6 @@ var Clusterer = /** @class */ (function () {
|
|
|
569
500
|
bounds.extend(position);
|
|
570
501
|
}
|
|
571
502
|
}
|
|
572
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
573
503
|
// @ts-ignore
|
|
574
504
|
this.getMap().fitBounds(bounds);
|
|
575
505
|
};
|
|
@@ -683,7 +613,7 @@ var Clusterer = /** @class */ (function () {
|
|
|
683
613
|
};
|
|
684
614
|
Clusterer.prototype.addMarkers = function (markers, optNoDraw) {
|
|
685
615
|
for (var key in markers) {
|
|
686
|
-
if (
|
|
616
|
+
if (Object.prototype.hasOwnProperty.call(markers, key)) {
|
|
687
617
|
this.pushMarkerTo(markers[key]);
|
|
688
618
|
}
|
|
689
619
|
}
|
|
@@ -695,7 +625,6 @@ var Clusterer = /** @class */ (function () {
|
|
|
695
625
|
var _this = this;
|
|
696
626
|
// If the marker is draggable add a listener so we can update the clusters on the dragend:
|
|
697
627
|
if (marker.getDraggable()) {
|
|
698
|
-
// eslint-disable-next-line @getify/proper-arrows/name, @getify/proper-arrows/this
|
|
699
628
|
google.maps.event.addListener(marker, 'dragend', function () {
|
|
700
629
|
if (_this.ready) {
|
|
701
630
|
marker.isAdded = false;
|
|
@@ -762,7 +691,6 @@ var Clusterer = /** @class */ (function () {
|
|
|
762
691
|
}, 0);
|
|
763
692
|
};
|
|
764
693
|
Clusterer.prototype.getExtendedBounds = function (bounds) {
|
|
765
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
766
694
|
// @ts-ignore
|
|
767
695
|
var projection = this.getProjection();
|
|
768
696
|
// Convert the points to pixels and the extend out by the grid size.
|
|
@@ -873,16 +801,13 @@ var Clusterer = /** @class */ (function () {
|
|
|
873
801
|
//
|
|
874
802
|
// See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:
|
|
875
803
|
var mapBounds =
|
|
876
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
877
804
|
// @ts-ignore
|
|
878
805
|
this.getMap().getZoom() > 3
|
|
879
806
|
? new google.maps.LatLngBounds(
|
|
880
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
881
807
|
// @ts-ignore
|
|
882
808
|
this.getMap()
|
|
883
809
|
.getBounds()
|
|
884
810
|
.getSouthWest(),
|
|
885
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
886
811
|
// @ts-ignore
|
|
887
812
|
this.getMap()
|
|
888
813
|
.getBounds()
|
|
@@ -899,9 +824,7 @@ var Clusterer = /** @class */ (function () {
|
|
|
899
824
|
}
|
|
900
825
|
}
|
|
901
826
|
if (iLast < this.markers.length) {
|
|
902
|
-
this.timerRefStatic = window.setTimeout(
|
|
903
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
904
|
-
function () {
|
|
827
|
+
this.timerRefStatic = window.setTimeout(function () {
|
|
905
828
|
_this.createClusters(iLast);
|
|
906
829
|
}, 0);
|
|
907
830
|
}
|
|
@@ -924,11 +847,9 @@ var Clusterer = /** @class */ (function () {
|
|
|
924
847
|
return function applyExtend(object) {
|
|
925
848
|
// eslint-disable-next-line guard-for-in
|
|
926
849
|
for (var property in object.prototype) {
|
|
927
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
928
850
|
// @ts-ignore
|
|
929
851
|
this.prototype[property] = object.prototype[property];
|
|
930
852
|
}
|
|
931
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
932
853
|
// @ts-ignore
|
|
933
854
|
return this;
|
|
934
855
|
}.apply(obj1, [obj2]);
|