Retour au classement

mapbox/supercluster

JavaScript

A very fast geospatial point clustering library for browsers and Node.

clusteringalgorithmcomputational-geometryjavascriptmaps
Croissance des étoiles
Étoiles
2.3k
Forks
303
Croissance hebdomadaire
Issues
30
1k2k
janv. 2023mars 2024mai 2025juil. 2026
Artefactsnpmnpm install supercluster
README

supercluster Simply Awesome Node

A very fast JavaScript library for geospatial point clustering for browsers and Node.

const index = new Supercluster({radius: 40, maxZoom: 16});
index.load(points);

const clusters = index.getClusters([-180, -85, 180, 85], 2);

Clustering 6 million points in Leaflet:

clustering demo on an interactive Leaflet map

Supercluster was built to power clustering in Mapbox GL JS. Read about how it works on the Mapbox blog.

Install

Install using NPM (npm install supercluster) or Yarn (yarn add supercluster), then:

// import as a ES module in Node
import Supercluster from 'supercluster';

// import from a CDN in the browser:
import Supercluster from 'https://esm.run/supercluster';

Or use it with an ordinary script tag in the browser:

<script src="https://unpkg.com/supercluster@8.0.0/dist/supercluster.min.js"></script>

Methods

load(points)

Loads an array of GeoJSON Feature objects. Each feature's geometry must be a GeoJSON Point. Once loaded, index is immutable.

getClusters(bbox, zoom)

For the given bbox array ([westLng, southLat, eastLng, northLat]) and integer zoom, returns an array of clusters and points as GeoJSON Feature objects.

getTile(z, x, y)

For a given zoom and x/y coordinates, returns a geojson-vt-compatible JSON tile object with cluster/point features.

getChildren(clusterId)

Returns the children of a cluster (on the next zoom level) given its id (cluster_id value from feature properties).

getLeaves(clusterId, limit = 10, offset = 0)

Returns all the points of a cluster (given its cluster_id), with pagination support: limit is the number of points to return (set to Infinity for all points), and offset is the amount of points to skip (for pagination).

getClusterExpansionZoom(clusterId)

Returns the zoom on which the cluster expands into several children (useful for "click to zoom" feature) given the cluster's cluster_id.

Options

Option Default Description
minZoom 0 Minimum zoom level at which clusters are generated.
maxZoom 16 Maximum zoom level at which clusters are generated.
minPoints 2 Minimum number of points to form a cluster.
radius 40 Cluster radius, in pixels.
extent 512 (Tiles) Tile extent. Radius is calculated relative to this value.
nodeSize 64 Size of the KD-tree leaf node. Affects performance.
log false Whether timing info should be logged.
generateId false Whether to generate ids for input features in vector tiles.

Property map/reduce options

In addition to the options above, Supercluster supports property aggregation with the following two options:

  • map: a function that returns cluster properties corresponding to a single point.
  • reduce: a reduce function that merges properties of two clusters into one.

Example of setting up a sum cluster property that accumulates the sum of myValue property values:

const index = new Supercluster({
    map: (props) => ({sum: props.myValue}),
    reduce: (accumulated, props) => { accumulated.sum += props.sum; }
});

The map/reduce options must satisfy these conditions to work correctly:

  • map must return a new object, not existing properties of a point, otherwise it will get overwritten.
  • reduce must not mutate the second argument (props).

TypeScript

Install @types/supercluster for the TypeScript type definitions:

npm install @types/supercluster --save-dev 

Developing Supercluster

npm install       # install dependencies
npm run build     # generate dist/supercluster.js and dist/supercluster.min.js
npm test          # run tests
Dépôts similaires
Effect-TS/effect

Build production-ready applications in TypeScript

TypeScriptnpmMIT Licenseeffectjavascript
effect.website
15k620
pycaret/pycaret

Open-source, low-code AutoML platform for Python. PyCaret 4.0: sklearn-native engine + React control plane.

PythonPyPIOtherdata-sciencepython
pycaret.org
9.8k1.9k
postgresml/postgresml

Postgres with GPUs for ML/AI apps.

Rustcrates.ioMIT Licensemlmachine-learning
postgresml.org
6.8k366
haifengl/smile

Statistical Machine Intelligence & Learning Engine

JavaMavenOthermachine-learningregression
haifengl.github.io
6.4k1.1k
biolab/orange3

🍊 :bar_chart: :bulb: Orange: Interactive data analysis

PythonPyPIOtherdata-miningdata-science
orangedatamining.com
5.7k1.1k
asynkron/protoactor-go

Proto Actor - Ultra fast distributed actors for Go, C# and Java/Kotlin

GoGo ModulesApache License 2.0grpcactor-model
proto.actor
5.5k574
dedupeio/dedupe

:id: A python library for accurate and scalable fuzzy matching, record deduplication and entity-resolution.

PythonPyPIMIT Licensededuperecord-linkage
docs.dedupe.io
4.5k575
BinRoot/TensorFlow-Book

Accompanying source code for Machine Learning with TensorFlow. Refer to the book for step-by-step explanations.

Jupyter NotebookMIT Licensetensorflowmachine-learning
tensorflowbook.com
4.4k1.2k
unum-cloud/USearch

Fast Open-Source Search & Clustering engine × for Vectors & Arbitrary Objects × in C++, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, and Wolfram 🔍

C++Apache License 2.0kannvector-search
unum.cloud/usearch
4.2k334
Leaflet/Leaflet.markercluster

Marker Clustering plugin for Leaflet

JavaScriptnpmMIT Licenseleafletmap
4.2k1k
seandavi/awesome-single-cell

Community-curated list of software packages and data resources for single-cell, including RNA-seq, ATAC-seq, etc.

MIT Licenserna-seq-datagene-expression
3.8k1.1k
christianversloot/machine-learning-articles

🧠💬 Articles I wrote about machine learning, archived from MachineCurve.com.

machine-learningdeep-learning
3.7k761