A static spatial index for 2D points based on a flat KD-tree for .Net ( ported direclty from the JS library kdbush ) :
- points only โ no rectangles
- static โ you can't add/remove items
var index = new KDBush<double[]>(pointsData, nodeSize: 10); // make an index
var ids1 = index.Range(20, 30, 50, 70); // bbox search - minX, minY, maxX, maxY
var ids2 = index.Within(10, 10, 5); // radius search - x, y, radius
Creates an index from the given points.
points
: Input array of points of type T.getX
,getY
: Functions to getx
andy
from an input point. By default, it assumes[x, y]
format.nodeSize
: Size of the KD-tree node,64
by default. Higher means faster indexing but slower search, and vise versa.
var index = new KDBush<double[]>(pointsData, getX: p => p[0], getY: p => p[1], nodeSize: 64);
Finds all items within the given bounding box and returns a List of indices that refer to the items in the original points
input array.
var index = new KDBush<double[]>(points);
var results = index.Range(20, 30, 50, 70).Select(id => points[id]);
Finds all items within a given radius from the query point and returns a List of indices.
var index = new KDBush<double[]>(points);
var queryPoint = new double[] {50, 50};
var r = 20;
var results = index.Within(queryPoint[0], queryPoint[1], r);