@googlemaps/markerclusterer

Creates and manages per-zoom-level clusters for large amounts of markers.
- Static
- Latest Patch
- Latest Minor
- Latest Major
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.1
- 2.4.0
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.15
- 2.0.14
- 2.0.13
- 2.0.12
- 2.0.11
- 2.0.10
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.27
- 1.0.26
- 1.0.25
- 1.0.24
- 1.0.23
- 1.0.22
- 1.0.21
- 1.0.20
- 1.0.19
- 1.0.18
- 1.0.17
- 1.0.16
- 1.0.15
- 1.0.14
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 2.3.2-beta.1
- 2.2.0-beta.2
- 2.2.0-beta.1
- 2.1.0-beta.2
- 2.1.0-beta.1
Google Maps JavaScript MarkerClusterer
Description
The library creates and manages per-zoom-level clusters for large amounts of markers.
See the history section and migration section for how this library relates to @google/markerclusterer and @googlemaps/markerclustererplus.
Install
Available via npm as the package @googlemaps/markerclusterer.
npm i @googlemaps/markerclusterer
Alternativly you may add the umd package directly to the html document using the unpkg link.
<script src="https://unpkg.com/@googlemaps/markerclusterer/dist/index.min.js"></script>
When adding via unpkg, the MarkerClusterer
can be accessed at markerClusterer.MarkerClusterer
.
TypeScript
This library uses the official TypeScript typings for Google Maps Platform, @types/google.maps.
npm i -D @types/google.maps
Documentation
The reference documentation is generated from the TypeScript definitions.
Examples
import { MarkerClusterer } from "@googlemaps/markerclusterer";
// use default algorithm and renderer
const markerCluster = new MarkerClusterer({ map, markers });
View the package in action:
Algorithm Comparisons - This example demonstrates the different algorithms. Please note that spacing and many other options can be changed for each algorithm.
Renderer Usage - This example demonstrates different renderers similar to the image below.
History
This library has a heritage in @google/markerclusterer and @googlemaps/markerclustererplus, originally made available on code.google.com and then transferred to GitHub at https://github.com/googlemaps/v3-utility-library. The following is an approximate timeline.
- 201X - @google/markerclusterer was created.
- 201X - @googlemaps/markerclustererplus was created.
- 2019 - Libraries were published to NPM.
- 2019 - @google/markerclusterer was deprecated for @googlemaps/markerclustererplus.
- 2020 - @googlemaps/markerclustererplus was refactored to TypeScript.
- 2020 - @googlemaps/markerclustererplus was moved to a separate repository.
- 2021 - @googlemaps/markerclustererplus was rewritten as @googlemaps/markerclusterer (new).
- TBD - @googlemaps/markerclustererplus is deprecated for @googlemaps/markerclusterer (new).
Migration
The API of @googlemaps/markerclusterer has changed in a number of ways from @googlemaps/markerclustererplus.
- The
MarkerClusterer
class now accepts analgorithm
andrenderer
parameter to allow for more flexibility. The interface looks like the following:
{
algorithm?: Algorithm;
map?: google.maps.Map;
markers?: google.maps.Marker[];
renderer?: Renderer;
onClusterClick?: onClusterClickHandler;
}
- The
MarkerClusterer
accepts a single options argument instead of positional parameters. - The traditional
GridAlgorithm
is still supported, but is not the default. The default is supercluster which uses k-d trees for improved performance. - Styling of clusters has been simplifed and moved to the renderer interface.
- The
MarkerClusterer
class is still an instance ofgoogle.maps.OverlayView
, but usesgoogle.maps.Marker
s instead ofgoogle.maps.Overlay
to render the clusters. This solves issues related to the usage of map panes and click handlers. - @googlemaps/markerclusterer supports Marker and Map a11y improvements.