説明
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文字のGaoHashとなります。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
関連ドキュメント
ST_GEOMFROMTEXTの詳細については、ジオメトリ関数の作成を参照してください。POLYGONの詳細については、空間データ形式を参照してください。