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
Modifier and TypeFieldDescriptionstatic double
The geo-tile map is clipped at 85.05112878 to 90 and -85.05112878 to -90static int
Largest number of tiles (precision) to use.static double
Since shapes are encoded, their boundaries are to be compared to against the encoded/decoded values ofLATITUDE_MASK
static double
-
Method Summary
Modifier and TypeMethodDescriptionstatic 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(String hashAsString)
Encode a geotile hash style string to a long.static long
longEncodeTiles(int precision, long xTile, long yTile)
static String
stringEncode(long hash)
Encode to a geotile string from the geotile based long formatstatic 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(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)
-