Example usage for org.apache.lucene.spatial.prefix.tree QuadPrefixTree QuadPrefixTree

List of usage examples for org.apache.lucene.spatial.prefix.tree QuadPrefixTree QuadPrefixTree

Introduction

In this page you can find the example usage for org.apache.lucene.spatial.prefix.tree QuadPrefixTree QuadPrefixTree.

Prototype

public QuadPrefixTree(SpatialContext ctx) 

Source Link

Usage

From source file:org.elasticsearch.index.search.geo.GeoUtilsTests.java

License:Apache License

@Test
public void testPrefixTreeCellSizes() {
    assertThat(GeoUtils.EARTH_SEMI_MAJOR_AXIS, equalTo(DistanceUtils.EARTH_EQUATORIAL_RADIUS_KM * 1000));
    assertThat(GeoUtils.quadTreeCellWidth(0), lessThanOrEqualTo(GeoUtils.EARTH_EQUATOR));

    SpatialContext spatialContext = new SpatialContext(true);

    GeohashPrefixTree geohashPrefixTree = new GeohashPrefixTree(spatialContext,
            GeohashPrefixTree.getMaxLevelsPossible() / 2);
    Cell gNode = geohashPrefixTree.getWorldCell();

    for (int i = 0; i < geohashPrefixTree.getMaxLevels(); i++) {
        double width = GeoUtils.geoHashCellWidth(i);
        double height = GeoUtils.geoHashCellHeight(i);
        double size = GeoUtils.geoHashCellSize(i);
        double degrees = 360.0 * width / GeoUtils.EARTH_EQUATOR;
        int level = GeoUtils.quadTreeLevelsForPrecision(size);

        assertThat(GeoUtils.quadTreeCellWidth(level), lessThanOrEqualTo(width));
        assertThat(GeoUtils.quadTreeCellHeight(level), lessThanOrEqualTo(height));
        assertThat(GeoUtils.geoHashLevelsForPrecision(size),
                equalTo(geohashPrefixTree.getLevelForDistance(degrees)));

        assertThat("width at level " + i, gNode.getShape().getBoundingBox().getWidth(),
                equalTo(360.d * width / GeoUtils.EARTH_EQUATOR));
        assertThat("height at level " + i, gNode.getShape().getBoundingBox().getHeight(),
                equalTo(180.d * height / GeoUtils.EARTH_POLAR_DISTANCE));

        gNode = gNode.getSubCells(null).iterator().next();
    }/*from w ww.  j a  v  a 2s .  c  o  m*/

    QuadPrefixTree quadPrefixTree = new QuadPrefixTree(spatialContext);
    Cell qNode = quadPrefixTree.getWorldCell();
    for (int i = 0; i < QuadPrefixTree.DEFAULT_MAX_LEVELS; i++) {

        double degrees = 360.0 / (1L << i);
        double width = GeoUtils.quadTreeCellWidth(i);
        double height = GeoUtils.quadTreeCellHeight(i);
        double size = GeoUtils.quadTreeCellSize(i);
        int level = GeoUtils.quadTreeLevelsForPrecision(size);

        assertThat(GeoUtils.quadTreeCellWidth(level), lessThanOrEqualTo(width));
        assertThat(GeoUtils.quadTreeCellHeight(level), lessThanOrEqualTo(height));
        assertThat(GeoUtils.quadTreeLevelsForPrecision(size),
                equalTo(quadPrefixTree.getLevelForDistance(degrees)));

        assertThat("width at level " + i, qNode.getShape().getBoundingBox().getWidth(),
                equalTo(360.d * width / GeoUtils.EARTH_EQUATOR));
        assertThat("height at level " + i, qNode.getShape().getBoundingBox().getHeight(),
                equalTo(180.d * height / GeoUtils.EARTH_POLAR_DISTANCE));

        qNode = qNode.getSubCells(null).iterator().next();
    }
}