空间Geohash函数
Geohash是用于将任意精度的纬度和经度坐标编码为文本字符串的系统。Geohash值是仅包含选自中的字符的字符串"0123456789bcdefghjkmnpqrstuvwxyz"。
本节中的功能使您能够操纵geohash值,从而为应用程序提供导入和导出geohash数据以及索引和搜索geohash值的功能。
除非另有说明,否则本节中的函数将按以下方式处理其参数:
- 如果有任何参数NULL,则返回值为NULL。
- 如果任何参数无效,则会发生错误。
- 如果任何参数的经度或纬度超出范围,则会发生错误: - 如果任何经度参数不在范围内(-180,180],ER_LONGITUDE_OUT_OF_RANGE则会发生错误。
- 如果任何纬度参数不在[-90,90]范围内,ER_LATITUDE_OUT_OF_RANGE则会发生错误。
 - 显示的范围以度为单位。精确的范围限制由于浮点运算而略有不同。 
- 如果任何经度参数不在范围内(-180,180],
- 如果任何点参数不具有SRID 0或4326,ER_SRS_NOT_FOUND则会发生错误。point不检查参数SRID的有效性。
- 如果任何SRID参数都引用了未定义的空间参照系(SRS),ER_SRS_NOT_FOUND则会发生错误。
- 如果任何SRID参数不在32位无符号整数的范围内,ER_DATA_OUT_OF_RANGE则会发生错误。
- 否则,返回值为non-NULL。
这些geohash函数可用:
- ST_GeoHash(longitude,latitude,max_length),- ST_GeoHash(point,max_length)- 返回连接字符集和校验规则中的geohash字符串。 - 对于第一种语法, - longitude必须为[-180,180]范围内的数字,并且- latitude必须为[-90,90]范围内的数字。对于第二种语法,- POINT需要一个值,其中X和Y坐标分别在经度和纬度的有效范围内。- 生成的字符串不得超过 - max_length字符(上限为100个字符)。该字符串可能比- max_length字符短,这是因为创建geohash值的算法会继续进行,直到创建的字符串可以精确表示位置或- max_length字符,以先到者为准。- ST_GeoHash()按照本节简介中所述处理其参数。- 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)- 从geohash字符串值返回纬度,以[-90,90]范围内的双精度数表示。 - 该 - ST_LatFromGeoHash()解码函数读取不超过从433个字符- geohash_str的参数。这代表了坐标值内部表示中信息的上限。超过433rd的字符将被忽略,即使它们在其他方面是非法的并产生错误。- ST_LatFromGeoHash()按照本节简介中所述处理其参数。- mysql> - SELECT ST_LatFromGeoHash(ST_GeoHash(45,-20,10)); +------------------------------------------ + | ST_LatFromGeoHash(ST_GeoHash(45, -20,10)) | +------------------------------------------ + | -20 | +------------------------------------------ +
- ST_LongFromGeoHash(geohash_str)- 从geohash字符串值返回经度,作为范围为[−180,180]的双精度数字。 - ST_LatFromGeoHash()关于从- geohash_str参数处理的最大字符数的描述中的注释也适用于- ST_LongFromGeoHash()。- ST_LongFromGeoHash()按照本节简介中所述处理其参数。- mysql> - SELECT ST_LongFromGeoHash(ST_GeoHash(45,-20,10)); +------------------------------------------- + | ST_LongFromGeoHash(ST_GeoHash(45, -20,10)) | +------------------------------------------- + | 45 | +------------------------------------------- +
- ST_PointFromGeoHash(geohash_str,srid)- POINT给定一个geohash字符串值,返回一个包含解码的geohash值的值。- 该点的X坐标和Y坐标分别是[-180,180]范围内的经度和[-90,90]范围内的纬度。 - 所述 - srid参数是一个32位无符号整数。- ST_LatFromGeoHash()关于从- geohash_str参数处理的最大字符数的描述中的注释也适用于- ST_PointFromGeoHash()。- ST_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) | +--------------------------------------- +
