Выходные данные реализации STRtree содержат случайные точки

Я использую JTS с Netbeans для реализации STRtrees. Я пытаюсь построить STRtree для набора точек (координаты). Вот мой код:

package example;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.index.ArrayListVisitor;
import com.vividsolutions.jts.index.strtree.STRtree;
import java.util.List;

public class Example {


public static void main(String[] args) {
    //Getting input from the user as points

    GeometryFactory gf = new GeometryFactory();
    Coordinate coord = new Coordinate( 1, 1 );
    Point point=gf.createPoint( coord );
     coord = new Coordinate( 3,2 );
    Point point2=gf.createPoint( coord );
    coord = new Coordinate( 2,4 );
    Point point3=gf.createPoint( coord );
     coord = new Coordinate( 4,1 );
    Point point4=gf.createPoint( coord );
     coord = new Coordinate( 5,2);
    Point point5=gf.createPoint( coord );
     coord = new Coordinate( 4,5);
    Point point6=gf.createPoint( coord );
    coord = new Coordinate( 3,6 );
    Point point7=gf.createPoint( coord );
     coord = new Coordinate( 1,6 );
    Point point8=gf.createPoint( coord );
     coord = new Coordinate( 6,2 );
    Point point9=gf.createPoint( coord );
     coord = new Coordinate( 7,1 );
    Point point10=gf.createPoint( coord );
    coord = new Coordinate( 6,4 );
    Point point11=gf.createPoint( coord );
     coord = new Coordinate( 9,2);
    Point point12=gf.createPoint( coord );
    coord = new Coordinate( 3,8);
    Point point13=gf.createPoint( coord );
     coord = new Coordinate( 1,7);
    Point point14=gf.createPoint( coord );
    coord = new Coordinate( 3,7 );
    Point point15=gf.createPoint( coord );
     coord = new Coordinate( 5,7 );
    Point point16=gf.createPoint( coord );
    //Building the str object
    STRtree strTree=new STRtree();
    //inserting the points into the tree
    strTree.insert(point.getEnvelopeInternal(), point);
    strTree.insert(point2.getEnvelopeInternal(), point2);
    strTree.insert(point3.getEnvelopeInternal(), point3);
     strTree.insert(point4.getEnvelopeInternal(), point4);
    strTree.insert(point5.getEnvelopeInternal(), point5);
    strTree.insert(point6.getEnvelopeInternal(), point6);
     strTree.insert(point7.getEnvelopeInternal(), point7);
    strTree.insert(point8.getEnvelopeInternal(), point8);
    strTree.insert(point9.getEnvelopeInternal(), point9);
     strTree.insert(point10.getEnvelopeInternal(), point10);
    strTree.insert(point11.getEnvelopeInternal(), point11);
    strTree.insert(point12.getEnvelopeInternal(), point12);
     strTree.insert(point13.getEnvelopeInternal(), point13);
    strTree.insert(point14.getEnvelopeInternal(), point14);
    strTree.insert(point15.getEnvelopeInternal(), point15);
    strTree.insert(point16.getEnvelopeInternal(), point16);
    //Building the tree
    strTree.build();
    Coordinate coord2 = new Coordinate( 0,0 );
    Coordinate coord3 = new Coordinate( 5,5);
     Envelope e1=new Envelope(coord2,coord3);
     List List1 = strTree.query(e1);
     System.out.println(List1);
}
}

Код соответствует требованиям и работает, но я ожидал, что точки будут отсортированы в таком порядке (roots->children->leaves). Но мой вывод содержит случайные точки в охваченной области. Где я неправ?


person Gautam    schedule 02.01.2014    source источник


Ответы (1)


R-дерево хранит все точки в конечных узлах.

«Заказ», который вы ищете, не существует; все результаты должны быть из листьев.

JTS API выглядит слишком дорого. Координаты, завернутые в точки, завернутые в конверты. Вы можете взглянуть на ELKI, который, как я обнаружил, имеет очень высокую производительность. Вопреки распространенному мнению, я обнаружил, что R-деревья ELKI (по крайней мере, при массовой загрузке STR) по-прежнему очень хорошо работают в 32 измерениях (общеизвестно, что R-деревья работают только до 10 измерений).

person Has QUIT--Anony-Mousse    schedule 02.01.2014
comment
Мне просто нужно двумерное дерево, чтобы правильно показать корень, дочерние элементы и листья (если это невозможно, по крайней мере, порядок, в котором мои листья обволакиваются, координаты отображаются случайным образом). Есть ли какое-либо другое программное обеспечение, которое я мог бы использовать, или вы могли бы настроить этот код, чтобы получить мой вывод? - person Gautam; 07.01.2014
comment
Ну, я не знаю ваш вывод. Поскольку R-дерево не будет иметь точки в качестве корневого узла, никакое R-дерево даст вам точку в качестве корня. - person Has QUIT--Anony-Mousse; 08.01.2014