R-Tree Library for Javascript, optimized for maps.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
dist
examples
lib
test
.gitignore
.jshintrc
.travis.yml
MIT-LICENSE.md
README.md
bower.json
index.html
package.json
viz.js

README.md

#rTree Build Status

A non-recursive R-Tree library in pure JavaScript with no dependencies. Fork of Jon-Carlos Rivera's fantastic library which sadly seems not to be maintained. MIT Licensed.

##So far:

  • Bug fix when deleting points.
  • Common.js module.
  • Updated tests.
  • Factory function for constructor.
  • Method for dealing with GeoJSON.
  • All methods now accept callbacks.
  • Query by bbox instead of rectangle.
  • Submit to NPM.
  • Update examples.
  • add closure
  • add GruntFile
  • fix syntax (make it pass jslint)
  • more modular
  • that bug with deleting

##API

  • RTree ( [ Number max_node_width, Function callback ] )

###Parameters:

  • max_node_width : optional : The maximum width of a node before a split is performed1.

###Returns:

  • An empty rTree object.

###Usage:

  • Make a new rTree with a max node width of 10:
  • var myRTree = RTree(10);

##rTree.insert

  • rTree.insert ( Rectangle3 bounds, Object element)

###Parameters:

  • bounds : required : A minimally bounding box for element.
  • element : required : An object to add to the R-Tree.

###Returns:

  • True.

###Usage:

  • Insert a 10x10 object that starts at position 10x10:
  • myRTree.insert({x:10, y:10, w:10, h:10}, myObject);

##rTree.remove

  • rTree.remove ( Rectangle3 area _[, Object element)

###Parameters:

  • area : required : An area to search within.
  • element : optional : An object to remove from the R-Tree. If no object is specified, all elements that touch area are deleted.

###Returns:

  • An array of leafs deleted from the R-Tree.

###Usage:

  • Deletes all object that touch the 10x10 rectangle starting at position 10x10:
  • var myDelCount = myRTree.delete({x:10, y:10, w:10, h:10});
  • Delete only specific object if it touches the 10x10 rectangle starting at position 10x10:
  • var myDelCount = myRTree.delete({x:10, y:10, w:10, h:10}, specific_object);

##rTree.geoJSON:

  • rTree.geoJSON ( Object or Array geoJSON)

###Parameters

  • geoJSON : required : Either an Object representing a GeoJSON feature collection or an Array representing a list of GeoJSON features.

###Usage:

myRTree.geoJSON({
	"type":"FeatureCollection",
	"features":[
		{
			"type":"Feature",
			"geometry":{
				"type":"Point",
				"coordinates":[100,1]
			},
			"properties":{
				"prop0":"value0"
			}
		},
		{
			"type":"Feature",
			"geometry":{
				"type":"LineString",
				"coordinates":[
					[100,0],
					[101,1]
				]
			},
			"properties":{
				"prop0":"value0"
			}
		}
	]
});

##rTree.bbox:

  • rTree.bbox ( Bounds area)

###Parameters

  • area : required : Area to search, this can either be represented by a single parameter bounds array [[x1,y1],[x2,y2]], two parameters representing the southwest and northeast corners [x1,y1],[x2,y2], or 4 parameters of [x1,y1,x2,y2].

###Returns:

  • An array of matched features.

###Usage:

  • Search a 10x10 area that starts at position 10x10 (these are all equivalent):
  • var myObjects1 = myRTree.bbox([[10,10],[20,20]]);
  • var myObjects2 = myRTree.bbox([[10,10],[20,20]]);
  • var myObjects3 = myRTree.bbox([10,10],[20,20]);
  • var myObjects4 = myRTree.bbox([10,10],[20,20]);
  • var myObjects5 = myRTree.bbox(10,10,20,20);
  • var myObjects6 = myRTree.bbox(10,10,20,20);

##rTree.search

  • RTree.search ( Rectangle3 area [, Boolean return node, Array return_array ])

###Parameters:

  • area : required : An area to search within.
  • return node : optional : Whether to return the entire node, mainly internal option.
  • return array : optional : An existing array to add the results to, defaults to [], mainly internal option.

###Returns:

  • An array of objects that overlap or touch area.

###Usage:

  • Search a 10x10 area that starts at position 10x10:
  • var myObjects = myRTree.search({x:10, y:10, w:10, h:10});

###Notes

1 Default max node width is currently 6.

3 A Rectangle is any object with public x, y, w, h properties. The object itself is not saved or used directly but copies are made of its x, y, w, h properties.