Class GeoTileUtils
java.lang.Object
org.elasticsearch.search.aggregations.bucket.geogrid.GeoTileUtils
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
FieldsModifier and TypeFieldDescriptionstatic doubleThe geo-tile map is clipped at 85.05112878 to 90 and -85.05112878 to -90static intLargest number of tiles (precision) to use.static doubleSince shapes are encoded, their boundaries are to be compared to against the encoded/decoded values ofLATITUDE_MASKstatic double -
Method Summary
Modifier and TypeMethodDescriptionstatic intcheckPrecisionRange(int precision)Assert the precision value is within the allowed range, and return it if ok, or throw.static intgetXTile(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 intgetYTile(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 longlongEncode(double longitude, double latitude, int precision)Encode lon/lat to the geotile based long format.static longlongEncode(String hashAsString)Encode a geotile hash style string to a long.static longlongEncodeTiles(int precision, long xTile, long yTile)static StringstringEncode(long hash)Encode to a geotile string from the geotile based long formatstatic org.elasticsearch.geometry.RectangletoBoundingBox(int xTile, int yTile, int precision)static org.elasticsearch.geometry.RectangletoBoundingBox(long hash)static org.elasticsearch.geometry.RectangletoBoundingBox(String hash)Decode a string bucket key in "zoom/x/y" format to a bounding box of the tile corners
-
Field Details
-
MAX_ZOOM
public static final int MAX_ZOOMLargest 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_MASKThe 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_MASKSince shapes are encoded, their boundaries are to be compared to against the encoded/decoded values ofLATITUDE_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-coordinatetiles- 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-coordinatetiles- 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
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
Encode to a geotile string from the geotile based long format -
toBoundingBox
public static org.elasticsearch.geometry.Rectangle toBoundingBox(long hash) -
toBoundingBox
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)
-