Home

Awesome

<!-- ########################################################################## NOTE TO CONTRIBUTOR: this README is automatically generated from build/readme.template.md. Should you need to modify the README, please make your modifications on the template file. ########################################################################### -->

Leaflet.MarkerCluster.Freezable

Sub-plugin for Leaflet.markercluster plugin (MCG in short); adds the ability to freeze clusters at a specified zoom.

Leaflet.markercluster plugin provides beautiful animated Marker Clustering functionality.

Leaflet is the leading open-source JavaScript library for mobile-friendly interactive maps.

GitHub releases npm

Requirements

This plugin is compatible with the following combinations:

<table> <tr> <th>Leaflet</th> <th>Leaflet.markercluster</th> <th>Leaflet.MarkerCluster.Freezable</th> </tr> <tr> <td rowspan="2"> 1.0.0&nbsp;→&nbsp;1.3.1 </td> <td> 1.0.4&nbsp;→&nbsp;1.3.0 </td> <td> <a href="https://github.com/ghybs/Leaflet.MarkerCluster.Freezable/releases/tag/v1.0.0">1.0.0</a> </td> </tr> <tr> <!--td>("eaten" by above rowspan)</td--> <td> 1.0.0&nbsp;→&nbsp;1.0.3 </td> <td rowspan="2"> <a href="https://github.com/ghybs/Leaflet.MarkerCluster.Freezable/releases/tag/v0.1.1">0.1.1</a> </td> </tr> <tr> <td> 0.7.7 </td> <td> 0.5.0 </td> <!--td>("eaten" by above rowspan)</td--> </tr> </table>

Demos

Usage instructions

Quick Guide

HTML:

<!-- After Leaflet and Leaflet.markercluster scripts -->
<script src="leaflet.markercluster.freezable.js"></script>

JavaScript:

var map = L.map("map"),
    mcg = L.markerClusterGroup(options);
    
mcg.addLayers(arrayOfMarkers);
mcg.addTo(map);

mcg.freezeAtZoom(15);
mcg.freezeAtZoom("maxKeepSpiderfy");
mcg.freezeAtZoom("max");
mcg.unfreeze(); // shortcut for mcg.freezeAtZoom(false)

mcg.disableClusteringKeepSpiderfy(); // shortcut for mcg.freezeAtZoom("maxKeepSpiderfy")
mcg.disableClustering(); // shortcut for mcg.freezeAtZoom("max")
mcg.enableClustering(); // alias for mcg.unfreeze()

When frozen / disabled, clusters will no longer split / merge on map zoom, but retain their status as if they were on the specified zoom level. They will directly spiderfy when clicked on, instead of zooming to bounds (since zooming will not make them split apart).

In particular, freezing at maxZoom + 1 removes all clusters.

Freezing at maxZoom removes all clusters except the bottom-most ones, so that user can still spiderfy closely positioned markers.

CAUTION: make sure your operations makes sense before freezing to high zoom whereas the map is at a low zoom. It may have to load thousands of markers suddenly!

Note: while frozen, MCG will continue removing clusters and markers which are far from the view port, accordingly with removeOutsideVisibleBounds option.

Installing the sub-plugin

Local copy

  1. Download the "<a href="https://github.com/ghybs/Leaflet.MarkerCluster.Freezable/releases/download/v1.0.0/leaflet.markercluster.freezable.js">leaflet.markercluster.freezable.js</a>" file from the v1.0.0 release.
  2. Place the file alongside your page.
  3. Add the script tag (see Quick Guide > HTML) to your page after Leaflet and Leaflet.markercluster scripts.

CDN

You can alternatively use the free unpkg CDN service, but keep in mind that it "is a free, best-effort service and cannot provide any uptime or support guarantees".

<!-- After Leaflet script -->
<script src="https://unpkg.com/leaflet.markercluster.freezable@1.0.0/dist/leaflet.markercluster.freezable.js"></script>

Or with Subresource Integrity:

<script
    src="https://unpkg.com/leaflet.markercluster.freezable@1.0.0/dist/leaflet.markercluster.freezable.js"
    integrity="sha384-QXTyM8sAAM5XAUeRoyzNadlfH7KuYt0C6i9O/T2vFb4wGIKwL9Ak++3y3JBqfGyg"
    crossorigin="anonymous"
></script>

npm

  1. Add this package to your project:

    $ npm install leaflet.markercluster.freezable --save
    
  2. If you are using a bundling tool, import in your JavaScript. It only performs the side effect of adding new methods to L.markerClusterGroup, so you do not need to store it into a local variable or import a namespace.

    require('leaflet.markercluster.freezable');
    // Or with ES6:
    import 'leaflet.markercluster.freezable';
    

Creation

Simply use the the regular L.markerClusterGroup factory, as Freezable plugin directly adds new methods to Leaflet.markercluster:

var mcg = L.markerClusterGroup(options);

mcg.addTo(map);

API Reference

Methods

MethodReturnsDescription
freezeAtZoom( <Number> or <String> or <Boolean> frozenZoom? )thisFreezes clusters at specified zoom, current zoom, or unfreeze. If passed a positive number (including 0), freezes at that zoom. If passed "max" (string), freezes at maxZoom + 1. If passed "maxKeepSpiderfy" (string), freezes at maxZoom. If passed nothing, undefined, true (boolean) or NaN, freezes at current zoom. If passed false (boolean) or any other non-number, unfreezes.
unfreeze()thisShortcut for freezeAtZoom(false).
disableClustering()thisShortcut for freezeAtZoom("max").
disableClusteringKeepSpiderfy()thisShortcut for freezeAtZoom("maxKeepSpiderfy").
enableClustering()thisShortcut for unfreeze().

MCG.Freezable does not provide any extra option or event.

Regular MCG options, events and methods

All regular MCG options, events and methods are available within MCG Layer Support. Refer to Leaflet.markercluster documentation.

Limitations

Freezing at current zoom while not on map

If you request MCG to freeze at current zoom, but MCG is not on any map at that moment, it will freeze at the zoom the map is at when added to it.

License

license

Leaflet.MarkerCluster.Freezable is distributed under the MIT License (Expat type), like Leaflet.markercluster.