r-tree


how to construct a RTree using given data points


I need to construct a R tree using given data points.I have searched for implementation of R tree.All the implementation i found construct r tree when given coordinates of rectangle as input.I need to construct r tree when given data points itself(it can be 1 dimensional).The code should take care of creating rectangles which encloses these data points and construct r tree.
Use MBRs (Minimum bounding rectangle) with min = max = coordinate. They all do it this way. Good implementations will however store point data with approximately twice the capacity in the leaves than in directory nodes.
If you're looking for a C++ implementation, the one contained in Boost.Geometry currently (Boost. 1.57) is able to store Points, Boxes and Segments. The obvious advantage is that the data in leafs of the tree is not duplicated which means that less memory is used, caching is better, etc. The usage looks like this:
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/geometries.hpp>
#include <boost/geometry/index/rtree.hpp>
#include <vector>
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
int main()
{
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
typedef bg::model::box<point> box;
// a container of points
std::vector<point> points;
// create the rtree
bgi::rtree< point, bgi::linear<16> > rtree(points.begin(), points.end());
// insert some additional points
rtree.insert(point(/*...*/));
rtree.insert(point(/*...*/));
// find points intersecting a box
std::vector<point> query_result;
rtree.query(bgi::intersects(box(/*...*/)), std::back_inserter(query_result));
// do something with the result
}
I guess that using an Rtree to store points seems like a misuse. Although this kind of structure is indicated to store spatial data, after some research I just found out it is best suited for storing non-zero area regions (as the R from the name is for Region or Rectangle). Creating a simple table with a nice index should offer better performance either for updating and searching data. Consider my example below:
CREATE TABLE locations (id, latitude, longitude);
CREATE INDEX idx_locations ON locations (latitude, longitude);
is preferable over
CREATE VIRTUAL TABLE locations USING rtree( id, minLatitude, maxLatitude, minLongitude, maxLongitude);
if you are just planning to repeat minLatitude over maxLatitude and minLongitude over maxLongitude for every row as to represent points and not rectangles. Although the latter approach will work as expected, Rtrees are suited to index rectangle areas and using them to store points is a misuse with worst performance. Prefer a compound index as above.
Further reading: http://www.deepdyve.com/lp/acm/r-trees-a-dynamic-index-structure-for-spatial-searching-ZH0iLI4kb0?key=acm

Related Links

How does R+-Tree manages intersecting objects?
Why does the unique R-Tree node appear to be in two enclosing rectangles?
ELKI DBSCAN R* tree index
R-Tree vs R+-Tree vs R*-Tree
How to bulk-load an r-tree in C#?
how to construct a RTree using given data points

Categories

HOME
java
compiler-construction
testing
asp.net-core
proxy
netbeans
single-sign-on
dictionary
comparison
layout
iot
spagobi
maven-3
youtube-api-v3
icloud
webpack-2
ravendb
networkx
indesign
adfs
spring-kafka
rascal
decomposition
windows-7-x64
finite-automata
angular-ui
firefox-webextensions
physics-engine
ehcache
graphicsmagick
captiveportal
emgucv
spark-jobserver
neo4j-spatial
nat
nouislider
directx-10
xquery-3.0
semantic-versioning
oracle-fusion-middleware
gtrendsr
kendo-ui-grid
bower-install
jmonkeyengine
x11-forwarding
starteam
angularjs-factory
leading-zero
squib
graphenedb
android-tabhost
sfdc
angular-resource
long-polling
atomicity
qsslsocket
theming
blogengine.net
pebble-watch
directory-structure
typed-lambda-calculus
pillow
libpng
database-optimization
thrust
prettytensor
make-install
bgp
livequery
hsv
pervasive-sql
spim
prerequisites
iis-arr
embedded-code
fluid-dynamics
oberon
dundas
device-orientation
truevault
geonetwork
gwidgets
issuu
internet-connection
bitcoinj
valueconverter
hippomocks
flexmojos
mysqltuner
aqtime
apc
ril
shellexecute
html4
coderush
reddot
krl
actionview
imac
h.323
suppress
thunderbird-lightning
mediarss
defensive-programming
multiple-languages
django-notification
misv

Resources

Encrypt Message