java.lang.Object
org.elasticsearch.search.aggregations.bucket.geogrid.GeoTileUtils

public final class GeoTileUtils
extends java.lang.Object
Implements geotile key hashing, same as used by many map tile implementations. The string key is formatted as "zoom/x/y" The hash value (long) contains all three of those values compacted into a single 64bit value: bits 58..63 -- zoom (0..29) bits 29..57 -- X tile index (0..2^zoom) bits 0..28 -- Y tile index (0..2^zoom)
  • Field Summary

    Fields
    Modifier and Type Field Description
    static double LATITUDE_MASK
    The geo-tile map is clipped at 85.05112878 to 90 and -85.05112878 to -90
    static int MAX_ZOOM
    Largest number of tiles (precision) to use.
    static double NORMALIZED_LATITUDE_MASK
    Since shapes are encoded, their boundaries are to be compared to against the encoded/decoded values of LATITUDE_MASK
    static double NORMALIZED_NEGATIVE_LATITUDE_MASK  
  • Method Summary

    Modifier and Type Method Description
    static int checkPrecisionRange​(int precision)
    Assert the precision value is within the allowed range, and return it if ok, or throw.
    static int getXTile​(double longitude, long tiles)
    Calculates the x-coordinate in the tile grid for the specified longitude given the number of tile columns for a pre-determined zoom-level.
    static int getYTile​(double latitude, long tiles)
    Calculates the y-coordinate in the tile grid for the specified longitude given the number of tile rows for pre-determined zoom-level.
    static long longEncode​(double longitude, double latitude, int precision)
    Encode lon/lat to the geotile based long format.
    static long longEncode​(java.lang.String hashAsString)
    Encode a geotile hash style string to a long.
    static long longEncodeTiles​(int precision, long xTile, long yTile)  
    static java.lang.String stringEncode​(long hash)
    Encode to a geotile string from the geotile based long format
    static org.elasticsearch.geometry.Rectangle toBoundingBox​(int xTile, int yTile, int precision)  
    static org.elasticsearch.geometry.Rectangle toBoundingBox​(long hash)  
    static org.elasticsearch.geometry.Rectangle toBoundingBox​(java.lang.String hash)
    Decode a string bucket key in "zoom/x/y" format to a bounding box of the tile corners

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • MAX_ZOOM

      public static final int MAX_ZOOM
      Largest number of tiles (precision) to use. This value cannot be more than (64-5)/2 = 29, because 5 bits are used for zoom level itself (0-31) If zoom is not stored inside hash, it would be possible to use up to 32. Note that changing this value will make serialization binary-incompatible between versions. Another consideration is that index optimizes lat/lng storage, loosing some precision. E.g. hash lng=140.74779717298918D lat=45.61884022447444D == "18/233561/93659", but shown as "18/233561/93658"
      See Also:
      Constant Field Values
    • LATITUDE_MASK

      public static final double LATITUDE_MASK
      The geo-tile map is clipped at 85.05112878 to 90 and -85.05112878 to -90
      See Also:
      Constant Field Values
    • NORMALIZED_LATITUDE_MASK

      public static final double NORMALIZED_LATITUDE_MASK
      Since shapes are encoded, their boundaries are to be compared to against the encoded/decoded values of LATITUDE_MASK
    • NORMALIZED_NEGATIVE_LATITUDE_MASK

      public static final double NORMALIZED_NEGATIVE_LATITUDE_MASK
  • Method Details

    • checkPrecisionRange

      public static int checkPrecisionRange​(int precision)
      Assert the precision value is within the allowed range, and return it if ok, or throw.
    • getXTile

      public static int getXTile​(double longitude, long tiles)
      Calculates the x-coordinate in the tile grid for the specified longitude given the number of tile columns for a pre-determined zoom-level.
      Parameters:
      longitude - the longitude to use when determining the tile x-coordinate
      tiles - the number of tiles per row for a pre-determined zoom-level
    • getYTile

      public static int getYTile​(double latitude, long tiles)
      Calculates the y-coordinate in the tile grid for the specified longitude given the number of tile rows for pre-determined zoom-level.
      Parameters:
      latitude - the latitude to use when determining the tile y-coordinate
      tiles - the number of tiles per column for a pre-determined zoom-level
    • longEncode

      public static long longEncode​(double longitude, double latitude, int precision)
      Encode lon/lat to the geotile based long format. The resulting hash contains interleaved tile X and Y coordinates. The precision itself is also encoded as a few high bits.
    • longEncode

      public static long longEncode​(java.lang.String hashAsString)
      Encode a geotile hash style string to a long.
      Parameters:
      hashAsString - String in format "zoom/x/y"
      Returns:
      long encoded value of the given string hash
    • longEncodeTiles

      public static long longEncodeTiles​(int precision, long xTile, long yTile)
    • stringEncode

      public static java.lang.String stringEncode​(long hash)
      Encode to a geotile string from the geotile based long format
    • toBoundingBox

      public static org.elasticsearch.geometry.Rectangle toBoundingBox​(long hash)
    • toBoundingBox

      public static org.elasticsearch.geometry.Rectangle toBoundingBox​(java.lang.String hash)
      Decode a string bucket key in "zoom/x/y" format to a bounding box of the tile corners
    • toBoundingBox

      public static org.elasticsearch.geometry.Rectangle toBoundingBox​(int xTile, int yTile, int precision)