Class GeoTileUtils
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 int
MAX_ZOOM
Largest number of tiles (precision) to use. -
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 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 java.lang.String
stringEncode(long hash)
Encode to a geotile string from the geotile based long format
-
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
-
-
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. -
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
-
stringEncode
public static java.lang.String stringEncode(long hash)Encode to a geotile string from the geotile based long format
-