All Projects → justinethier → node-kdtree

justinethier / node-kdtree

Licence: MIT license
A node.js add-on for performing efficient Nearest Neighbor searches using libkdtree.

Programming Languages

c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to node-kdtree

pynanoflann
Unofficial python wrapper to the nanoflann k-d tree
Stars: ✭ 24 (-58.62%)
Mutual labels:  kd-tree
libkdtree
libkdtree++ is an STL-like C++ template container implementation of k-dimensional space sorting, using a kd-tree. It sports a theoretically unlimited number of dimensions, and can store any data structure. Fork of the project once available from http://libkdtree.alioth.debian.org/
Stars: ✭ 46 (-20.69%)
Mutual labels:  kd-tree
UE4-Kdtree
UE4 Plugin: k-d tree
Stars: ✭ 48 (-17.24%)
Mutual labels:  kd-tree
bitpit
Open source library for scientific HPC
Stars: ✭ 80 (+37.93%)
Mutual labels:  kd-tree
knn-cpp
A header-only C++ library for k nearest neighbor search with Eigen3.
Stars: ✭ 25 (-56.9%)
Mutual labels:  kd-tree
ikd-Tree
This repository provides implementation of an incremental k-d tree for robotic applications.
Stars: ✭ 286 (+393.1%)
Mutual labels:  kd-tree
rrgeo
A fast, offline, reverse geocoder
Stars: ✭ 76 (+31.03%)
Mutual labels:  kd-tree
pointu
✏️ Pointillisme tool based on Weighted Voronoi Stippling
Stars: ✭ 32 (-44.83%)
Mutual labels:  kd-tree

#node-kdtree

node-kdtree is a node.js addon that defines a wrapper to libkdtree, allowing one to work with KD trees directly in node. A KD tree is a data structure that organizes points in a multi-dimensional space, and in particular is useful for performing efficient nearest neighbor searches.

Dependencies

The kdtree C library is required. In order to install, get the latest version from here and run the following commands:

./configure
make
sudo make install PREFIX=/usr 

Installation

The easiest way to install node-kdtree is to use the npm package manager:

npm install kdtree

Usage

###Creating a tree You may create a tree by instantiating a new KDTree object:

var kd = require('kdtree');
var tree = new kd.KDTree(3); // A new tree for 3-dimensional points

When creating a new tree we can specify the dimensions of the data. For example, a three-dimensional tree will contain points of the form (x, y, z). If a dimension is not specified, the tree defaults to three dimensions.

###Adding data to a tree Data may be added to the tree using the insert method:

tree.insert(1, 2, 3);
tree.insert(10, 20, 30);

There must be one argument for each dimension of the data - for example, a three dimensional tree would have three arguments to insert. An optional data parameter may also be specified to store a data value alongside the point data:

tree.insert(39.285785, -76.610262, "USS Constellation");

###Nearest neighbor searches The nearest method is used to find the point in the tree that is closest to a target point. For example:

> tree.nearest(39.273889, -76.738056);
[39.272051, -76.731917, "Bill's Music, Inc."]

nearest will return an array containing closest point, or an empty array if no points were found. As shown above, if the point contains a data value, that value will also be returned at the end of the array.

A nearestRange method is also provided, which allows us to find all of the points within a given range. For example:

> tree.nearestRange(0, 0, 3);
[ [ 1, 1 ],
  [ 0, 2 ],
  [ 2, 0 ],
  [ 1, 0 ],
  [ 0, 1 ],
  [ 0, 0 ] ]

The first arguments to nearestRange are the components of the point to begin searching at. The last argument is the search range.

##API

API documentation

##Credits

node-kdtree is developed by Justin Ethier.

Thanks to John Tsiombikas for developing libkdtree!

Patches are welcome; please send via pull request on github.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].