文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  空間 Geohash 函數

14.16.10 空間 Geohash 函數

Geohash 是一種將任意精度的經緯度座標編碼為文字字串的系統。Geohash 值是字串,其中只包含從 "0123456789bcdefghjkmnpqrstuvwxyz" 中選取的字元。

本節中的函數可以操作 geohash 值,這為應用程式提供了匯入和匯出 geohash 資料以及為 geohash 值建立索引和搜尋的功能。

除非另有說明,否則本節中的函數會以下列方式處理其幾何引數

  • 如果任何引數為 NULL,則傳回值為 NULL

  • 如果任何引數無效,則會發生錯誤。

  • 如果任何引數的經度或緯度超出範圍,則會發生錯誤

    顯示的範圍以度為單位。由於浮點算術的緣故,確切的範圍限制會稍微偏離。

  • 如果任何點引數沒有 SRID 0 或 4326,則會發生 ER_SRS_NOT_FOUND 錯誤。不會檢查 point 引數的 SRID 有效性。

  • 如果任何 SRID 引數參考未定義的空間參考系統 (SRS),則會發生 ER_SRS_NOT_FOUND 錯誤。

  • 如果任何 SRID 引數不在 32 位元無正負號整數的範圍內,則會發生 ER_DATA_OUT_OF_RANGE 錯誤。

  • 否則,傳回值為非 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() 解碼函數從 geohash_str 引數讀取不超過 433 個字元。這表示座標值內部表示形式中的資訊上限。會忽略第 433 個字元之後的字元,即使它們在其他情況下是非法的並產生錯誤。

    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)                         |
    +---------------------------------------+