spatialindex
add SpatialIndex clear() docs: QuadTree wip: SpatialIndex
This commit is contained in:
parent
c29c85db41
commit
c0ece9dd7d
@ -9,14 +9,19 @@ import org.oscim.utils.quadtree.BoxTree.BoxItem;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Quad-tree with fixed extents.
|
||||
* This implementation uses int bounding-boxes internally,
|
||||
* so items extents should be greater than 1. FIXME tests this case
|
||||
*/
|
||||
public class QuadTree<T> extends BoxTree<BoxItem<T>, T> implements SpatialIndex<T> {
|
||||
|
||||
static final Logger log = LoggerFactory.getLogger(QuadTree.class);
|
||||
|
||||
public QuadTree(int extents, int maxDepth) {
|
||||
super(extents, maxDepth);
|
||||
}
|
||||
|
||||
static final Logger log = LoggerFactory.getLogger(QuadTree.class);
|
||||
|
||||
final Pool<BoxItem<T>> boxPool = new Pool<BoxItem<T>>() {
|
||||
@Override
|
||||
protected BoxItem<T> createItem() {
|
||||
@ -67,10 +72,10 @@ public class QuadTree<T> extends BoxTree<BoxItem<T>, T> implements SpatialIndex<
|
||||
}
|
||||
|
||||
@Override
|
||||
public int search(Box bbox, SearchCb<T> cb, Object context) {
|
||||
public boolean search(Box bbox, SearchCb<T> cb, Object context) {
|
||||
BoxItem<T> box = getBox(bbox);
|
||||
search(box, cb, context);
|
||||
boolean finished = search(box, cb, context);
|
||||
boxPool.release(box);
|
||||
return 0;
|
||||
return finished;
|
||||
}
|
||||
}
|
||||
|
@ -316,32 +316,24 @@ public class RTree<T> implements SpatialIndex<T>, Iterable<T> {
|
||||
* @param a_context User context to pass as parameter to a_resultCallback
|
||||
* @return Returns the number of entries found
|
||||
*/
|
||||
public int search(double min[], double max[], SearchCb<T> cb, Object context) {
|
||||
public boolean search(double min[], double max[], SearchCb<T> cb, Object context) {
|
||||
Rect r = getRect();
|
||||
r.set(min, max);
|
||||
|
||||
/* NOTE: May want to return search result another way,
|
||||
* perhaps returning the number of found elements here. */
|
||||
//int[] foundCount = { 0 };
|
||||
//search(mRoot, r, foundCount, cb, context);
|
||||
searchStack(r, cb, context);
|
||||
|
||||
releaseRect(r);
|
||||
return 0; //foundCount[0];
|
||||
return true;
|
||||
}
|
||||
|
||||
public int search(Box bbox, SearchCb<T> cb, Object context) {
|
||||
public boolean search(Box bbox, SearchCb<T> cb, Object context) {
|
||||
Rect r = getRect();
|
||||
r.set(bbox);
|
||||
|
||||
/* NOTE: May want to return search result another way,
|
||||
* perhaps returning the number of found elements here. */
|
||||
//int[] foundCount = { 0 };
|
||||
//search(mRoot, r, foundCount, cb, context);
|
||||
searchStack(r, cb, context);
|
||||
|
||||
releaseRect(r);
|
||||
return 0; //foundCount[0];
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<T> search(Box bbox, List<T> results) {
|
||||
@ -385,7 +377,7 @@ public class RTree<T> implements SpatialIndex<T>, Iterable<T> {
|
||||
/**
|
||||
* Remove all entries from tree.
|
||||
*/
|
||||
public void removeAll() {
|
||||
public void clear() {
|
||||
/* Delete all existing nodes */
|
||||
reset();
|
||||
|
||||
|
@ -6,6 +6,14 @@ import org.oscim.core.Box;
|
||||
|
||||
public interface SpatialIndex<T> {
|
||||
public interface SearchCb<T> {
|
||||
/**
|
||||
*
|
||||
* TODO should be able to return 'continue', 'stop',
|
||||
* 'remove-current'
|
||||
*
|
||||
* @return false to stop search
|
||||
*/
|
||||
|
||||
boolean call(T item, Object context);
|
||||
}
|
||||
|
||||
@ -15,7 +23,9 @@ public interface SpatialIndex<T> {
|
||||
|
||||
public List<T> search(Box bbox, List<T> results);
|
||||
|
||||
public int search(Box bbox, SearchCb<T> cb, Object context);
|
||||
public boolean search(Box bbox, SearchCb<T> cb, Object context);
|
||||
|
||||
public int size();
|
||||
|
||||
public void clear();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user