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