@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/umd.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"umd.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":"umd.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/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-google-maps/marker-clusterer",
|
|
3
3
|
"sideEffects": false,
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.8.0",
|
|
5
5
|
"description": "Marker Clusterer for React.js Google Maps API",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": {
|
|
@@ -51,48 +51,56 @@
|
|
|
51
51
|
"test": "jest",
|
|
52
52
|
"prepublishOnly": "yarn build"
|
|
53
53
|
},
|
|
54
|
-
"dependencies": {
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@typescript/lib-dom": "npm:@types/web"
|
|
56
|
+
},
|
|
55
57
|
"devDependencies": {
|
|
56
58
|
"@getify/eslint-plugin-proper-arrows": "11.0.3",
|
|
57
|
-
"@rollup/plugin-commonjs": "21.0.
|
|
58
|
-
"@rollup/plugin-node-resolve": "13.
|
|
59
|
-
"@rollup/plugin-typescript": "8.3.
|
|
59
|
+
"@rollup/plugin-commonjs": "21.0.3",
|
|
60
|
+
"@rollup/plugin-node-resolve": "13.1.3",
|
|
61
|
+
"@rollup/plugin-typescript": "8.3.1",
|
|
60
62
|
"@types/babel-types": "7.0.11",
|
|
61
|
-
"@types/google.maps": "3.
|
|
62
|
-
"@types/jest": "27.
|
|
63
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
64
|
-
"@typescript-eslint/parser": "5.
|
|
65
|
-
"eslint": "
|
|
66
|
-
"eslint-config-
|
|
67
|
-
"eslint-config-standard
|
|
68
|
-
"eslint-import-resolver-typescript": "2.
|
|
63
|
+
"@types/google.maps": "3.48.3",
|
|
64
|
+
"@types/jest": "27.4.1",
|
|
65
|
+
"@typescript-eslint/eslint-plugin": "5.17.0",
|
|
66
|
+
"@typescript-eslint/parser": "5.17.0",
|
|
67
|
+
"eslint": "8.12.0",
|
|
68
|
+
"eslint-config-prettier": "^8.5.0",
|
|
69
|
+
"eslint-config-standard": "17.0.0-0",
|
|
70
|
+
"eslint-import-resolver-typescript": "2.7.1",
|
|
69
71
|
"eslint-plugin-ascii": "1.0.0",
|
|
70
72
|
"eslint-plugin-babel": "5.3.1",
|
|
71
73
|
"eslint-plugin-filenames": "1.3.2",
|
|
72
74
|
"eslint-plugin-html": "6.2.0",
|
|
73
|
-
"eslint-plugin-import": "2.25.
|
|
75
|
+
"eslint-plugin-import": "2.25.4",
|
|
76
|
+
"eslint-plugin-jest": "^26.1.3",
|
|
77
|
+
"eslint-plugin-jest-dom": "^4.0.1",
|
|
74
78
|
"eslint-plugin-json": "3.1.0",
|
|
75
|
-
"eslint-plugin-jsx-a11y": "6.
|
|
79
|
+
"eslint-plugin-jsx-a11y": "6.5.1",
|
|
80
|
+
"eslint-plugin-n": "^15.1.0",
|
|
76
81
|
"eslint-plugin-no-inferred-method-name": "2.0.0",
|
|
77
82
|
"eslint-plugin-node": "11.1.0",
|
|
78
83
|
"eslint-plugin-optimize-regex": "1.2.1",
|
|
79
|
-
"eslint-plugin-
|
|
80
|
-
"eslint-plugin-
|
|
84
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
85
|
+
"eslint-plugin-promise": "6.0.0",
|
|
86
|
+
"eslint-plugin-react": "7.29.4",
|
|
81
87
|
"eslint-plugin-react-functional-set-state": "1.2.1",
|
|
82
|
-
"eslint-plugin-react-hooks": "4.
|
|
83
|
-
"eslint-plugin-react-perf": "3.3.
|
|
88
|
+
"eslint-plugin-react-hooks": "4.4.0",
|
|
89
|
+
"eslint-plugin-react-perf": "3.3.1",
|
|
90
|
+
"eslint-plugin-security-node": "^1.1.1",
|
|
84
91
|
"eslint-plugin-standard": "5.0.0",
|
|
85
92
|
"eslint-plugin-you-dont-need-lodash-underscore": "6.12.0",
|
|
86
|
-
"jest": "27.
|
|
87
|
-
"jest-cli": "27.
|
|
93
|
+
"jest": "27.5.1",
|
|
94
|
+
"jest-cli": "27.5.1",
|
|
95
|
+
"prettier": "^2.6.2",
|
|
88
96
|
"react": "17.0.2",
|
|
89
97
|
"react-dom": "17.0.2",
|
|
90
98
|
"rimraf": "3.0.2",
|
|
91
|
-
"rollup": "2.
|
|
92
|
-
"rollup-plugin-dts": "4.0
|
|
99
|
+
"rollup": "2.70.1",
|
|
100
|
+
"rollup-plugin-dts": "4.2.0",
|
|
93
101
|
"rollup-plugin-terser": "7.0.2",
|
|
94
|
-
"ts-jest": "27.
|
|
95
|
-
"typescript": "4.
|
|
102
|
+
"ts-jest": "27.1.4",
|
|
103
|
+
"typescript": "4.6.3"
|
|
96
104
|
},
|
|
97
105
|
"gitHead": "80167ddcc3d8e356dbf0b0c3a6292c6a3a989f83"
|
|
98
106
|
}
|
package/src/Cluster.tsx
CHANGED
|
@@ -19,7 +19,6 @@ export class Cluster {
|
|
|
19
19
|
|
|
20
20
|
constructor(markerClusterer: Clusterer) {
|
|
21
21
|
this.markerClusterer = markerClusterer
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
23
22
|
// @ts-ignore
|
|
24
23
|
this.map = this.markerClusterer.getMap()
|
|
25
24
|
|
|
@@ -75,7 +74,6 @@ export class Cluster {
|
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
remove() {
|
|
78
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
79
77
|
// @ts-ignore
|
|
80
78
|
this.clusterIcon.setMap(null)
|
|
81
79
|
|
package/src/ClusterIcon.tsx
CHANGED
|
@@ -51,7 +51,6 @@ export class ClusterIcon {
|
|
|
51
51
|
this.fontStyle = 'normal'
|
|
52
52
|
this.fontFamily = 'Arial,sans-serif'
|
|
53
53
|
this.backgroundPosition = '0 0'
|
|
54
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
55
54
|
// @ts-ignore
|
|
56
55
|
this.setMap(cluster.getMap()) // Note: this causes onAdd to be called
|
|
57
56
|
}
|
|
@@ -66,13 +65,11 @@ export class ClusterIcon {
|
|
|
66
65
|
this.show()
|
|
67
66
|
}
|
|
68
67
|
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
70
68
|
// @ts-ignore
|
|
71
69
|
this.getPanes().overlayMouseTarget.appendChild(this.div)
|
|
72
70
|
|
|
73
71
|
// Fix for Issue 157
|
|
74
72
|
this.boundsChangedListener = google.maps.event.addListener(
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
76
73
|
// @ts-ignore
|
|
77
74
|
this.getMap(),
|
|
78
75
|
'boundschanged',
|
|
@@ -86,11 +83,9 @@ export class ClusterIcon {
|
|
|
86
83
|
cDraggingMapByCluster = false
|
|
87
84
|
})
|
|
88
85
|
|
|
89
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
90
86
|
google.maps.event.addDomListener(
|
|
91
87
|
this.div,
|
|
92
88
|
'click',
|
|
93
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
94
89
|
(event: Event) => {
|
|
95
90
|
cMouseDownInCluster = false
|
|
96
91
|
|
|
@@ -114,21 +109,17 @@ export class ClusterIcon {
|
|
|
114
109
|
|
|
115
110
|
const bounds = this.cluster.getBounds()
|
|
116
111
|
|
|
117
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
118
112
|
// @ts-ignore
|
|
119
113
|
markerClusterer.getMap().fitBounds(bounds)
|
|
120
114
|
|
|
121
115
|
// There is a fix for Issue 170 here:
|
|
122
116
|
setTimeout(function timeout() {
|
|
123
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
124
117
|
// @ts-ignore
|
|
125
118
|
markerClusterer.getMap().fitBounds(bounds)
|
|
126
119
|
|
|
127
120
|
// Don't zoom beyond the max zoom level
|
|
128
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
129
121
|
// @ts-ignore
|
|
130
122
|
if (maxZoom !== null && markerClusterer.getMap().getZoom() > maxZoom) {
|
|
131
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
132
123
|
// @ts-ignore
|
|
133
124
|
markerClusterer.getMap().setZoom(maxZoom + 1)
|
|
134
125
|
}
|
|
@@ -148,7 +139,6 @@ export class ClusterIcon {
|
|
|
148
139
|
google.maps.event.addDomListener(
|
|
149
140
|
this.div,
|
|
150
141
|
'mouseover',
|
|
151
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
152
142
|
() => {
|
|
153
143
|
/**
|
|
154
144
|
* This event is fired when the mouse moves over a cluster marker.
|
|
@@ -160,11 +150,9 @@ export class ClusterIcon {
|
|
|
160
150
|
}
|
|
161
151
|
)
|
|
162
152
|
|
|
163
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
164
153
|
google.maps.event.addDomListener(
|
|
165
154
|
this.div,
|
|
166
155
|
'mouseout',
|
|
167
|
-
// eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
|
|
168
156
|
() => {
|
|
169
157
|
/**
|
|
170
158
|
* This event is fired when the mouse moves out of a cluster marker.
|
|
@@ -212,14 +200,12 @@ export class ClusterIcon {
|
|
|
212
200
|
|
|
213
201
|
show() {
|
|
214
202
|
if (this.div && this.center) {
|
|
215
|
-
let
|
|
216
|
-
divTitle = ''
|
|
203
|
+
let divTitle = ''
|
|
217
204
|
|
|
218
205
|
// NOTE: values must be specified in px units
|
|
219
206
|
const bp = this.backgroundPosition.split(' ')
|
|
220
207
|
|
|
221
208
|
const spriteH = parseInt(bp[0].replace(/^\s+|\s+$/g, ''), 10)
|
|
222
|
-
|
|
223
209
|
const spriteV = parseInt(bp[1].replace(/^\s+|\s+$/g, ''), 10)
|
|
224
210
|
|
|
225
211
|
const pos = this.getPosFromLatLng(this.center)
|
|
@@ -230,79 +216,43 @@ export class ClusterIcon {
|
|
|
230
216
|
divTitle = this.sums.title
|
|
231
217
|
}
|
|
232
218
|
|
|
233
|
-
this.div.style.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
//@ts-ignore
|
|
219
|
+
this.div.style.cursor = 'pointer'
|
|
220
|
+
this.div.style.position = 'absolute'
|
|
221
|
+
this.div.style.top = `${pos.y}px`
|
|
222
|
+
this.div.style.left = `${pos.x}px`
|
|
223
|
+
this.div.style.width = `${this.width}px`
|
|
224
|
+
this.div.style.height = `${this.height}px`
|
|
225
|
+
|
|
226
|
+
const img = document.createElement('img')
|
|
227
|
+
img.alt = divTitle
|
|
228
|
+
img.src = this.url
|
|
229
|
+
img.style.position = 'absolute'
|
|
230
|
+
img.style.top = `${spriteV}px`
|
|
231
|
+
img.style.left = `${spriteH}px`
|
|
232
|
+
|
|
248
233
|
if (!this.cluster.getClusterer().enableRetinaIcons) {
|
|
249
|
-
img
|
|
250
|
-
'clip: rect(' +
|
|
251
|
-
-1 * spriteV +
|
|
252
|
-
'px, ' +
|
|
253
|
-
(-1 * spriteH + this.width) +
|
|
254
|
-
'px, ' +
|
|
255
|
-
(-1 * spriteV + this.height) +
|
|
256
|
-
'px, ' +
|
|
257
|
-
-1 * spriteH +
|
|
258
|
-
'px);'
|
|
234
|
+
img.style.clip = `rect(-${spriteV}px, -${spriteH + this.width}px, -${spriteV + this.height}, -${spriteH})`
|
|
259
235
|
}
|
|
260
236
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
'font-family: ' +
|
|
280
|
-
this.fontFamily +
|
|
281
|
-
';' +
|
|
282
|
-
'font-weight: ' +
|
|
283
|
-
this.fontWeight +
|
|
284
|
-
';' +
|
|
285
|
-
'font-style: ' +
|
|
286
|
-
this.fontStyle +
|
|
287
|
-
';' +
|
|
288
|
-
'text-decoration: ' +
|
|
289
|
-
this.textDecoration +
|
|
290
|
-
';' +
|
|
291
|
-
'text-align: center;' +
|
|
292
|
-
'width: ' +
|
|
293
|
-
this.width +
|
|
294
|
-
'px;' +
|
|
295
|
-
'line-height:' +
|
|
296
|
-
this.height +
|
|
297
|
-
'px;' +
|
|
298
|
-
"'>" +
|
|
299
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
300
|
-
// @ts-ignore
|
|
301
|
-
this.sums.text +
|
|
302
|
-
'</div>'
|
|
303
|
-
|
|
237
|
+
const textElm = document.createElement('div')
|
|
238
|
+
textElm.style.position = 'absolute'
|
|
239
|
+
textElm.style.top = `${this.anchorText[0]}px`
|
|
240
|
+
textElm.style.left = `${this.anchorText[1]}px`
|
|
241
|
+
textElm.style.color = this.textColor
|
|
242
|
+
textElm.style.fontSize = `${this.textSize}px`
|
|
243
|
+
textElm.style.fontFamily = this.fontFamily
|
|
244
|
+
textElm.style.fontWeight = this.fontWeight
|
|
245
|
+
textElm.style.fontStyle = this.fontStyle
|
|
246
|
+
textElm.style.textDecoration = this.textDecoration
|
|
247
|
+
textElm.style.textAlign = 'center'
|
|
248
|
+
textElm.style.width = `${this.width}px`
|
|
249
|
+
textElm.style.lineHeight = `${this.height}px`
|
|
250
|
+
textElm.innerText = `${this.sums?.text}`
|
|
251
|
+
|
|
252
|
+
this.div.innerHTML = ''
|
|
253
|
+
this.div.appendChild(img)
|
|
254
|
+
this.div.appendChild(textElm)
|
|
304
255
|
this.div.title = divTitle
|
|
305
|
-
|
|
306
256
|
this.div.style.display = ''
|
|
307
257
|
}
|
|
308
258
|
|
|
@@ -342,20 +292,7 @@ export class ClusterIcon {
|
|
|
342
292
|
this.center = center
|
|
343
293
|
}
|
|
344
294
|
|
|
345
|
-
createCss(pos: google.maps.Point): string {
|
|
346
|
-
const style = []
|
|
347
|
-
|
|
348
|
-
style.push('cursor: pointer;')
|
|
349
|
-
|
|
350
|
-
style.push('position: absolute; top: ' + pos.y + 'px; left: ' + pos.x + 'px;')
|
|
351
|
-
|
|
352
|
-
style.push('width: ' + this.width + 'px; height: ' + this.height + 'px;')
|
|
353
|
-
|
|
354
|
-
return style.join('')
|
|
355
|
-
}
|
|
356
|
-
|
|
357
295
|
getPosFromLatLng(latlng: google.maps.LatLng): google.maps.Point {
|
|
358
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
359
296
|
// @ts-ignore
|
|
360
297
|
const pos = this.getProjection().fromLatLngToDivPixel(latlng)
|
|
361
298
|
|