Nervously Practice Multithreading


    4.0.0 • Public • Published

    point-cluster Build Status experimental

    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 })


    ids = cluster(points, options?)

    Create index for the set of 2d points based on options.

    • points is an array of [x,y, x,y, ...] or [[x,y], [x,y], ...] coordinates.
    • ids is 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 points bounds, 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.

    • box can 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 ) )



    © 2017 Dmitry Yv. MIT License

    Development supported by


    npm i @plotly/point-cluster

    DownloadsWeekly Downloads






    Unpacked Size

    28 kB

    Total Files


    Last publish


    • alexshoe
    • t4rk
    • bronsolo
    • jmmease
    • chriddyp
    • bpostlethwaite
    • alexcjohnson
    • nicolaskruchten
    • antrg
    • archmoj
    • xhlu
    • hammadtheone