Geohash is a system for encoding latitude and longitude
coordinates of arbitrary precision into a text string. Geohash
values are strings that contain only characters chosen from
"0123456789bcdefghjkmnpqrstuvwxyz".
The functions in this section enable manipulation of geohash values, which provides applications the capabilities of importing and exporting geohash data, and of indexing and searching geohash values.
ST_GeoHash(,longitude,latitude,max_length)ST_GeoHash(point,max_length)Returns a geohash string in the connection character set and collation.
If any argument is
NULL, the return value isNULL. If any argument is invalid, an error occurs.For the first syntax, the
longitudemust be a number in the range [−180, 180], and thelatitudemust be a number in the range [−90, 90]. For the second syntax, aPOINTvalue is required, where the X and Y coordinates are in the valid ranges for longitude and latitude, respectively.The resulting string is no longer than
max_lengthcharacters, which has an upper limit of 100. The string might be shorter thanmax_lengthcharacters because the algorithm that creates the geohash value continues until it has created a string that is either an exact representation of the location ormax_lengthcharacters, whichever comes first.mysql> SELECT ST_GeoHash(180,0,10), ST_GeoHash(-180,-90,15); +----------------------+-------------------------+ | ST_GeoHash(180,0,10) | ST_GeoHash(-180,-90,15) | +----------------------+-------------------------+ | xbpbpbpbpb | 000000000000000 | +----------------------+-------------------------+ST_LatFromGeoHash(geohash_str)Returns the latitude from a geohash string value, as a
DOUBLEvalue in the range [−90, 90].If the argument is
NULL, the return value isNULL. If the argument is invalid, an error occurs.The
ST_LatFromGeoHash()decoding function reads no more than 433 characters from thegeohash_strargument. That represents the upper limit on information in the internal representation of coordinate values. Characters past the 433rd are ignored, even if they are otherwise illegal and produce an error.mysql> SELECT ST_LatFromGeoHash(ST_GeoHash(45,-20,10)); +------------------------------------------+ | ST_LatFromGeoHash(ST_GeoHash(45,-20,10)) | +------------------------------------------+ | -20 | +------------------------------------------+ST_LongFromGeoHash(geohash_str)Returns the longitude from a geohash string value, as a
DOUBLEvalue in the range [−180, 180].If the argument is
NULL, the return value isNULL. If the argument is invalid, an error occurs.The remarks in the description of
ST_LatFromGeoHash()regarding the maximum number of characters processed from thegeohash_strargument also apply toST_LongFromGeoHash().mysql> SELECT ST_LongFromGeoHash(ST_GeoHash(45,-20,10)); +-------------------------------------------+ | ST_LongFromGeoHash(ST_GeoHash(45,-20,10)) | +-------------------------------------------+ | 45 | +-------------------------------------------+ST_PointFromGeoHash(geohash_str,srid)Returns a
POINTvalue containing the decoded geohash value, given a geohash string value.The X and Y coordinates of the point are the longitude in the range [−180, 180] and the latitude in the range [−90, 90], respectively.
If any argument is
NULL, the return value isNULL. If any argument is invalid, an error occurs.The
sridargument is an unsigned 32-bit integer.The remarks in the description of
ST_LatFromGeoHash()regarding the maximum number of characters processed from thegeohash_strargument also apply toST_PointFromGeoHash().mysql> SET @gh = ST_GeoHash(45,-20,10); mysql> SELECT ST_AsText(ST_PointFromGeoHash(@gh,0)); +---------------------------------------+ | ST_AsText(ST_PointFromGeoHash(@gh,0)) | +---------------------------------------+ | POINT(45 -20) | +---------------------------------------+