Geohash是一个将任意精度的经纬度坐标编码为文本字符串的系统。Geohash值是只包含从中选择的字符的字符串“0123456789 bcdefghjkmnpqrstuvwxyz”
.
本节中的函数支持对geohash值的操作,这为应用程序提供了导入和导出geohash数据以及索引和搜索geohash值的功能。
除非另有说明,本节中的函数处理几何参数的方式如下:
如果任何论点是
零
,返回值为零
.如果任何参数无效,就会发生错误。
如果任何参数的经度或纬度超出了范围,则会发生错误:
如果经度值不在范围内(−180,180),则
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
发生错误(ER_LONGITUDE_OUT_OF_RANGE
MySQL 8.0.12之前的版本)。如果纬度值不在[−90,90]范围内,则
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
发生错误(ER_LATITUDE_OUT_OF_RANGE
MySQL 8.0.12之前的版本)。
显示的范围以度表示。由于使用浮点运算,精确的范围限制稍有偏差。
如果任何点参数没有SRID 0或4326,则
ER_SRS_NOT_FOUND
发生错误。点
参数SRID有效性不检查。如果任何SRID参数指向一个未定义的空间引用系统(SRS),则
ER_SRS_NOT_FOUND
发生错误。如果任何SRID参数不在32位无符号整数的范围内,则
ER_DATA_OUT_OF_RANGE
发生错误。否则,返回值为non-
零
.
这些geohash函数是可用的:
ST_GeoHash (
,经度
,纬度
,max_length
)ST_GeoHash (
点
,max_length
)返回连接字符集和排序规则中的地理散列字符串。
对于第一种语法,是
经度
必须是[−180,180]范围内的数字,且纬度
必须为[−90,90]范围内的数字。对于第二种语法,a点
值是必需的,其中X和Y坐标分别在经度和纬度的有效范围内。结果字符串不超过
max_length
字符,最大长度为100个。字符串可能比max_length
字符,因为创建geohash值的算法会一直持续,直到它创建了一个字符串,该字符串要么是位置的精确表示,要么是max_length
字符,无论哪个先出现。ST_GeoHash ()
如本节介绍中所述处理其参数。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
)从一个地理散列字符串值返回纬度,为范围[−90,90]内的双精度数字。
的
ST_LatFromGeoHash ()
解码函数从中读取不超过433个字符geohash_str
论点。表示坐标值的内部表示形式中信息的上限。超过433的字符将被忽略,即使它们在其他方面是非法的并产生错误。ST_LatFromGeoHash ()
如本节介绍中所述处理其参数。mysql >选择ST_LatFromGeoHash (ST_GeoHash(45、-20、10));+------------------------------------------+ | ST_LatFromGeoHash (ST_GeoHash (-20, 10 )) | +------------------------------------------+ | - 20 | +------------------------------------------+
ST_LongFromGeoHash (
geohash_str
)从geohash字符串值返回经度,为范围[−180,180]的双精度数字。
描述中的备注
ST_LatFromGeoHash ()
方法处理的最大字符数geohash_str
论证也适用于ST_LongFromGeoHash ()
.ST_LongFromGeoHash ()
如本节介绍中所述处理其参数。mysql >选择ST_LongFromGeoHash (ST_GeoHash(45、-20、10));+-------------------------------------------+ | ST_LongFromGeoHash (ST_GeoHash (-20, 10 )) | +-------------------------------------------+ | 45 | +-------------------------------------------+
ST_PointFromGeoHash (
geohash_str
,srid
)返回一个
点
给定一个geohash字符串值,其中包含已解码的geohash值。点的X坐标为[−180,180]范围内的经度,Y坐标为[−90,90]范围内的纬度。
的
srid
参数是一个32位无符号整数。描述中的备注
ST_LatFromGeoHash ()
方法处理的最大字符数geohash_str
论证也适用于ST_PointFromGeoHash ()
.ST_PointFromGeoHash ()
如本节介绍中所述处理其参数。mysql> SET @gh = ST_GeoHash(45,-20,10);mysql >选择ST_AsText (ST_PointFromGeoHash (@gh, 0));+---------------------------------------+ | ST_AsText (ST_PointFromGeoHash (@gh 0 )) | +---------------------------------------+ | 点(45 -20 ) | +---------------------------------------+