从QuadTree中提取元素

时间:2013-12-23 10:06:10

标签: java geolocation quadtree

我正在尝试使用QuadTree classQuadTreeNode class。我的问题如下。一旦我将元素放入QuadTree,有没有办法根据它们的地理位置(即西北,东北,西南和东南)提取这些元素,而不定义边界框?

这是我到目前为止所做的。在QuadTree类中,我引入了函数getChildren

public Vector<E> getChildren(int loc)
{   
    return top.getChildren(loc);
}

在QuadTreeNode类中,我介绍了这个:

public Vector<E> getChildren(int loc)
{   
    if (loc == 0)
        return _children[NORTHWEST].getItems();
    else if (loc == 1)
        return _children[NORTHEAST].getItems();
    else if (loc == 2)
        return _children[SOUTHEAST].getItems();
    else
        return _children[SOUTHWEST].getItems();
}

然后我创建了一个QuadTree并试图根据它们的地理位置获取元素。

_Qtree = new ITSQtree<Obj>();
for(Obj o : Objs )
   _Qtree.put(o);
List<Obj> childrenNORTHWEST = _Qtree.getChildren(0);
List<Obj> childrenNORTHEAST = _Qtree.getChildren(1);
List<Obj> childrenSOUTHEAST = _Qtree.getChildren(2);
List<Obj> childrenSOUTWEST = _Qtree.getChildren(3);

问题是结果总是空集[]

1 个答案:

答案 0 :(得分:1)

您不是在递归步骤中将子项添加到输出中。所以你只返回最底层节点,这可能是空的。另外getItems()是如何定义的?

这是针对节点类的经过测试的修复:

public Vector<E> getChildren(int loc) {
    Vector<E> list = new Vector<E>();
    getChildren(loc, list);
    return list;
}

private Vector<E> getChildren(int loc, Vector<E> list) {
    list.addAll(_items);
    return _children[loc].getChildren(loc, list);
}

此外,您可能希望使该类具有通用性,即public class QuadTree<T>public class QuadTreeNode<T>