2017-04-26 23 views
0

我是这部分的新手,所以我希望有经验的人可以提供一些建议。使用四叉树来定位大量的点

我有一个形状文件文件,其中包含许多形状。需要处理的数据是大量的点。我尝试为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); 

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

回答

0

A quad-tree是被称为bounding volume hierarchies (BVH)的一类数据结构的成员。具体来说,四叉树递归地将有限的二维空间细分为四个象限。在你的情况下,它看起来像你必须手动执行此操作,通过创建Node对象的层次结构并向它们添加形状,或者通过insert()将形状插入树中来完成。不幸的是,文件的正确使用方式并不十分清楚。

您需要注意的一件事是该类如何处理与多个四叉树节点相交的形状。乍一看,目前还不清楚这个库是否为你分割形状,所以你可能需要提出自己的解决方案。

+0

谢谢您的回复。这个图书馆的文件很难理解,我一直试图阅读它很长一段时间。我不知道如何在创建这些节点之后将形状添加到cooresponding节点。所以如果我尝试使用'insert(int recno,Envelope bounds)'来插入形状,从你的角度来看边界的含义是什么? –

+0

它看起来像一个信封代表形状的边界框:http://docs.geotools.org/latest/javadocs/org/geotools/geometry/Envelope2D.html – Corillian

+0

明白了。如果我已成功生成索引四叉树,我怎么能用它来定位点?我的意思是,它只有一个函数“搜索(Envelope bounds)”,这对于找到边界中的形状(?)可能很有用。找到积分有用吗? –