このページは機械翻訳したものです。
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) | +---------------------------------------+