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

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

Introduction

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

Prototype

int DEFAULT_MAX_LEVELS

To view the source code for org.apache.lucene.spatial.prefix.tree QuadPrefixTree DEFAULT_MAX_LEVELS.

Click 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  w  w .j  a  v  a  2 s.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();
    }
}