使用四叉树来定位大量的点

时间:2017-04-26 02:23:02

标签: java shapefile quadtree

我是这部分的新手,所以我希望有经验的人可以给出一些建议。

我有一个形状文件文档,其中包含许多形状。需要处理的数据是大量的点。我尝试为shapefile生成四叉树索引,然后找到这些点。我找到了一个适合它的课程。

http://docs.geotools.org/latest/javadocs/org/geotools/data/shapefile/index/quadtree/QuadTree.html#insert-org.geotools.data.shapefile.index.quadtree.Node-int-com.vividsolutions.jts.geom.Envelope-int-

以下是我的代码

    ShpFiles shpFile = new ShpFiles(shpFileName);
    IndexFile indexShapeFile = new IndexFile(shpFile,true);
    int numShapes = indexShapeFile.getRecordCount();
    com.vividsolutions.jts.geom.Envelope eRoot = new com.vividsolutions.jts.geom.Envelope(-85,85,-180,180);
    QuadTree t1 = new QuadTree(numShapes,eRoot,indexShapeFile);

问题是,我下一步该怎么做?我是否需要手动插入所有多边形?我怎么能用这棵树搜索点?

1 个答案:

答案 0 :(得分:0)

quad-tree是一类数据结构的成员,称为bounding volume hierarchies (BVH)。具体地,四叉树递归地将有限的二维空间细分为四个象限。在您的情况下,您需要手动执行此操作,方法是创建Node对象的层次结构并向其添加形状,或者通过{{{{{{{{{{{{{{ 1}}。不幸的是,文档在正确使用方面并不是很清楚。

您需要注意的一件事是insert()类如何处理与多个四叉树节点相交的形状。乍一看,这个库是否为您分割形状并不清楚,因此您可能需要提出自己的解决方案。