説明
GeoHashは地理コーディングシステム(Geocode System)であり、緯度と経度の座標を文字列形式(アルファベットと数字の組み合わせ)に変換することで、地理的位置に対するテキスト表現を提供します。GeoHashは正確な点の位置を指すものではなく、長方形領域を表し、その領域内のすべての点には同じGeoHash値が割り当てられます。この特性により、個人の位置情報のプライバシーを保護しつつ、地理的位置の近似表現と高速な処理を可能にします。GeoHashの核心的な考え方は区間二分です:地球を二次元平面と見なし、経度と緯度に対してそれぞれ再帰的に二分してより小さなサブブロックを得て、各サブブロックに対して符号化を行います。これにより、GeoHashが長いほど、経度と緯度の分割回数が多くなることがわかります。分割回数が多いほど、長方形のサブブロックは小さくなり、位置精度が高くなります。
本記事では、_ST_GeoHash 関数は、幾何オブジェクト(Geometry)を文字列表現のGeoHash値に変換するために使用されます。
構文
_ST_GeoHash(geometry, [precision])
パラメータ説明
geometry:GeoHash値に変換する幾何オブジェクトを表します。precision:オプションです。整数(int)形式の入力を受け付け、GeoHashの計算精度、すなわち返されるGeoHash文字列の長さです。数値が大きいほど、表す地理的範囲が精密になります。precisionを指定しない場合、またはprecisionを 0 に指定した場合、返されるGeoHashの精度は入力された幾何オブジェクトに基づいて計算され、入力された幾何オブジェクトを含む最小のサブブロックの精度となります。Point の場合、精度 20 文字の GeoHash が返されます。precisionを指定した場合、返される GeoHash の精度は指定されたprecisionとなります。非点の場合、計算の起点は幾何体の境界ボックスの中心です。
例
点をアルファベットと数字で構成される短い文字列の GeoHash 値に変換します。精度は 20 に設定します。
obclient [test]> SELECT _ST_GeoHash(Point(-126.002,48.348), 20) AS geohash;実行結果は次のとおりです:
+----------------------+ | geohash | +----------------------+ | c0w7hc2ps87jfvwhesrb | +----------------------+ 1 row in set多角形をアルファベットと数字で構成される短い文字列の GeoHash 値に変換します。精度は 10 に設定します。
ST_GEOMFROMTEXT関数は WKT(Well-Known Text)形式の文字列を受け取り、幾何オブジェクトを返します。この例では、POLYGON((10 10, 20 20, 10 30, 0 20, 10 10))を入力パラメータとして使用しています。この文字列は、多角形の5つの頂点座標を定義しています。最後の座標は最初の座標と同じであるため、閉じた多角形となります。- 10 は GeoHash の精度パラメータであり、返される GeoHash 文字列の長さを示します。
- クエリ結果列の名前を
geohashとします。
obclient [test]> SELECT _ST_GeoHash(ST_GEOMFROMTEXT('POLYGON((10 10, 20 20, 10 30, 0 20, 10 10))'), 10) AS geohash;実行結果は次のとおりです:
+------------+ | geohash | +------------+ | s5x1g8cu2y | +------------+ 1 row in set