RTree<String, Geometry> tree = RTree.create();
如果确定RTree存储的类型例如Point,则可以指定类型创建
RTree<String, Point> tree = RTree.create();
Geometries
提供了以下几种构造结点的方法Geometries.rectangle
Geometries.circle
Geometries.point
Geometries.line
(requires jts-core dependency)添加方式
tree = tree.add(item, Geometries.point(10,20));or
tree = tree.add(Entry.entry(item, Geometries.point(10,20));
tree = tree.delete(item, Geometries.point(10,20));
or
tree = tree.delete(entry);
Point point = Geometries.pointGeographic(lon, lat); Rectangle rectangle = Geometries.rectangleGeographic(lon1, lat1, lon2, lat2);
O(log(n))
,最差为 O(n)
。给定一个查询矩形,返回与查询矩形向重叠的entry
Observable<Entry<T, Geometry>> results =
tree.search(Geometries.rectangle(0,0,2,2));
Observable<Entry<T, Geometry>> results =
tree.search(Geometries.rectangle(0,0,2,2),5.0);
返回RTree的所有结点
Observable<Entry<T, Geometry>> results = tree.entries();
返回距离给定点距离不超过maxDistance的所有entry
publicObservable<Entry<T,S>> search(finalPoint p, final double maxDistance) { |
return search(p.mbr(), maxDistance); |
搜索指定点指定邻域半径的entry,先构造查询窗口,再filter过滤
Rectangle bounds = createBounds(from,eps); //构造查询窗口
return tree
// do the first search using the bounds
.search(bounds)
// refine using the exact distance
.filter(new Func1, Boolean>() {
@Override
public Boolean call(Entry entry) {
Point p = entry.geometry();
Position position = Position.create(p.y(), p.x());
double dis = from.getDistanceToKm(position);
return dis< eps; //eps为事先设定的邻域半径
}
});