MySQL 8.0 リファレンスマニュアル


12.17.10 空間 Geohash 関数

geohash は、任意の精度の緯度と経度の座標をテキスト文字列にエンコードするためのシステムです。 geohash 値は、"0123456789bcdefghjkmnpqrstuvwxyz"から選択された文字のみを含む文字列です。

このセクションの関数を使用すると、geohash データのインポートとエクスポート、および geohash 値のインデックス付けと検索の機能をアプリケーションに提供する geohash 値を操作できます。

特に指定がないかぎり、このセクションの関数はジオメトリ引数を次のように処理します:

  • いずれかの引数が NULL の場合、戻り値は NULL です。

  • 無効な引数がある場合は、エラーが発生します。

  • 範囲外の経度または緯度を持つ引数がある場合、エラーが発生します:

    • 経度の値が (−180, 180]の範囲内にない場合は、ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE エラーが発生します (MySQL 8.0.12 より前の ER_LONGITUDE_OUT_OF_RANGE)。

    • 緯度の値が[−90, 90]の範囲内にない場合は、ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE エラーが発生します (MySQL 8.0.12 より前の 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 エラーが発生します。

  • それ以外の場合、戻り値は NULL 以外です。

次の geohash 関数を使用できます:

  • ST_GeoHash(longitude, latitude, max_length), ST_GeoHash(point, max_length)

    接続文字セットおよび照合順序で geohash 文字列を戻します。

    最初の構文では、longitude は[-180, 180]の範囲の数値である必要があり、latitude は[-90, 90]の範囲の数値である必要があります。 2 番目の構文では、POINT 値が必要です。X 座標と Y 座標は、それぞれ経度と緯度の有効範囲内にあります。

    結果の文字列は max_length 文字以下で、上限は 100 です。 geohash 値を作成するアルゴリズムでは、場所または max_length 文字の正確な表現のいずれか (いずれか早い方) の文字列が作成されるまで続行されるため、文字列が 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 文字以内を読み取ります。 座標値の内部表現における情報の上限を表します。 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]の倍精度数値として返します。

    geohash_str 引数から処理される最大文字数に関する ST_LatFromGeoHash() の説明の注釈は、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)

    geohash 文字列値を指定して、デコードされた geohash 値を含む POINT 値を戻します。

    点の X 座標と Y 座標は、それぞれ[−180, 180]の範囲の経度と[−90, 90]の範囲の緯度です。

    srid 引数は 32 ビットの符号なし整数です。

    geohash_str 引数から処理される最大文字数に関する ST_LatFromGeoHash() の説明の注釈は、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)                         |
    +---------------------------------------+

関連キーワード:  関数, 空間, 範囲, GeoHash, 処理, 文字, エラー, 発生, LatFromGeoHash, 数値