point-cluster  
 
 
Point clustering for 2D spatial indexing. Incorporates optimized quad-tree data structure.
const cluster = require('point-cluster')
let ids = cluster(points)
// get point ids in the indicated range
let selectedIds = ids.range([10, 10, 20, 20])
// get levels of details: list of ids subranges for rendering purposes
let lod = ids.range([10, 10, 20, 20], { lod: true }) 
API
ids = cluster(points, options?)
 
Create index for the set of 2d points based on options.
- pointsis an array of- [x,y, x,y, ...]or- [[x,y], [x,y], ...]coordinates.
- idsis Uint32Array with point ids sorted by zoom levels, suitable for WebGL buffer, subranging or alike.
- options
| Option | Default | Description | 
|---|---|---|
| bounds | 'auto' | Data range, if different from pointsbounds, eg. in case of subdata. | 
| depth | 256 | Max number of levels. Points below the indicated level are grouped into single level. | 
| output | 'array' | Output data array or data format. For available formats see dtype. | 
result = ids.range(box?, options?)
 
Get point ids from the indicated range.
- boxcan be any rectangle object, eg.- [l, t, r, b], see parse-rect.
- options
| Option | Default | Description | 
|---|---|---|
| lod | false | Makes result a list of level details instead of ids, useful for obtaining subranges to render. | 
| px | 0 | Min pixel size in data dimension (number or [width, height]couple) to search for, to ignore lower levels. | 
| level | null | Max level to limit search. | 
let levels = ids.range([0,0, 100, 100], { lod: true, d: dataRange / canvas.width })
levels.forEach([from, to] => {
	// offset and count point to range in `ids` array
	render( ids.subarray( from, to ) )
}) 
Related
- snap-points-2d − grouping points by pixels.
- kdgrass − minimal kd-tree implementation.
- regl-scatter2d − highly performant scatter2d plot.
License
© 2017 Dmitry Yv. MIT License
Development supported by plot.ly.
 JarCasting
 JarCasting