• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 空间Geohash函数

    Geohash是用于将任意精度的纬度和经度坐标编码为文本字符串的系统。Geohash值是仅包含选自中的字符的字符串"0123456789bcdefghjkmnpqrstuvwxyz"

    本节中的功能使您能够操纵geohash值,从而为应用程序提供导入和导出geohash数据以及索引和搜索geohash值的功能。

    除非另有说明,否则本节中的函数将按以下方式处理其参数:

    • 如果有任何参数NULL,则返回值为NULL
    • 如果任何参数无效,则会发生错误。
    • 如果任何参数的经度或纬度超出范围,则会发生错误:

      • 如果任何经度参数不在范围内(-180,180],ER_LONGITUDE_OUT_OF_RANGE则会发生错误。
      • 如果任何纬度参数不在[-90,90]范围内,ER_LATITUDE_OUT_OF_RANGE则会发生错误。

      显示的范围以度为单位。精确的范围限制由于浮点运算而略有不同。

    • 如果任何点参数不具有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)                         	|
      +---------------------------------------	+