mapbox/supercluster hiện có 2.4k sao trên GitHub, viết chủ yếu bằng JavaScript. A very fast geospatial point clustering library for browsers and Node.
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
VÌ SAO CHƯA CÓ REVIEW
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
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:
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:
Loads an array of GeoJSON Feature objects. Each feature's geometry must be a GeoJSON Point or MultiPoint — a MultiPoint is clustered as an individual point per coordinate, each inheriting the feature's properties and id. 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, or null where there's no data.
getTileRaw(z, x, y)
The same tile, but with each feature flat — {type: 4, x, y, tags}, coords inline instead of
wrapped in a nested geometry array. Every clustered feature is a single point, so this is exactly
geojson-vt's getTileRaw shape narrowed to its lone-point (type: 4) variant.
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. Capped at 30.
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
Type declarations ship with the library; remove @types/supercluster if you have it. The types those
declarations exposed as namespace members are now named exports:
import Supercluster from 'supercluster';
import type {Options, PointFeature, ClusterFeature, Tile, RawTile} from 'supercluster';
Developing Supercluster
npm install # install dependencies
npm run build # generate dist/supercluster.js and dist/supercluster.min.js
npm test # run tests
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/mapbox/supercluster là nguồn chính thức.
mapbox/supercluster có những chủ đề gì?
GitHub topics của mapbox/supercluster: "algorithm", "clustering", "computational-geometry", "javascript", "maps". TopGit xếp repo vào nhóm Frontend.
mapbox/supercluster có phải mã nguồn mở không?
Có — mapbox/supercluster phát hành theo license ISC, nghĩa là mã nguồn mở để đọc, fork và (tùy license) tái sử dụng. Mã: github.com/mapbox/supercluster.
mapbox/supercluster có website riêng không?
TopGit chưa ghi nhận URL trang chủ cho mapbox/supercluster. Phần README ở tab phía trên thường có link demo, hoặc xem mô tả GitHub của repo.
mapbox/supercluster còn đang phát triển không?
Commit gần nhất trên mapbox/supercluster là 3 tháng trước (theo timestamp GitHub). Repo có 303 fork — một chỉ báo về mức độ quan tâm của cộng đồng.
mapbox/supercluster dùng license gì?
mapbox/supercluster phát hành theo license ISC. Nên mở file LICENSE trên GitHub để xác nhận — license metadata đôi khi lệch với thực tế dự án.
Đọc đầy đủ README ở tab phía trên.
Muốn nghe thêm một ý kiến về supercluster?
Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về supercluster.