- カテゴリ:
ST_GEOHASH¶
GEOGRAPHY または GEOMETRY オブジェクトの geohash を返します。geohashは、世界の場所を含む測地線の長方形を識別する、Base32の短い文字列です。
geohashの文字数によって精度が決まります。geohashの末尾から文字を削除すると、geohashの精度が低下し、より大きな長方形の領域が識別されます。
ST_GEOHASH 20文字の長さのgeohashを返します。オプションの precision
引数は、返されるgeohashの精度を指定します。たとえば、 precision
に 5
を渡すと、精度の低い、短いgeohash(5文字)が返されます。
注釈
ポイントではない地理空間オブジェクトの場合、関数はデフォルトまたは precision
の指定値に関係なく、精度の低いgeohashを返す可能性があります。
これらの場合、精度は空間オブジェクトの境界ボックスによって決定されます。ST_GEOHASH 最初に、境界ボックスの左下隅と右上隅のgeohashを決定し、次にこれら2つのgeohashに共通のプレフィックスを返します。
- こちらもご参照ください。
構文¶
ST_GEOHASH( <geography_expression> [, <precision> ] )
ST_GEOHASH( <geometry_expression> [, <precision> ] )
引数¶
必須:
geography_expression
引数は GEOGRAPHY 型の式でなければなりません。
geometry_expression
引数は SRID 4326の型 GEOMETRY の式にする必要があります。
オプション:
precision
geohashで使用する文字数。
1
から20
までの値を指定できます。デフォルトでは、
precision
は20
であり、20文字の長さのgeohashを生成します。
戻り値¶
指定されたオブジェクトのgeohash(STRING 型の値)を返します。
オブジェクトがポリゴンであり、境界ボックスの2つのポイントが同じgeohashプレフィックスを共有していない場合、関数は空の文字列を返す可能性があります。
例¶
次の例は、 GEOGRAPHY ポイントのgeohashを返します。
SELECT ST_GEOHASH(
TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
AS geohash_of_point_a;
+----------------------+
| GEOHASH_OF_POINT_A |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+
次の例では、同じ GEOGRAPHY ポイントのgeohashの精度を下げて返します。
SELECT ST_GEOHASH(
TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
5) AS less_precise_geohash_a;
+------------------------+
| LESS_PRECISE_GEOHASH_A |
|------------------------|
| 9q9j8 |
+------------------------+
次の例は、 GEOMETRY ポイントのgeohashを返します。
SELECT ST_GEOHASH(
TO_GEOMETRY('POINT(-122.306100 37.554162)', 4326))
AS geohash_of_point_a;
+----------------------+
| GEOHASH_OF_POINT_A |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+
次の例は、同じプレフィックスを共有する2つのgeohashを示しています。これは、2つの GEOGRAPHY ポイントが互いに近いことを示しています。
SELECT
ST_GEOHASH(
TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
AS geohash_of_point_a,
ST_GEOHASH(
TO_GEOGRAPHY('POINT(-122.323111 37.562333)'))
AS geohash_of_point_b;
+----------------------+----------------------+
| GEOHASH_OF_POINT_A | GEOHASH_OF_POINT_B |
|----------------------+----------------------|
| 9q9j8ue2v71y5zzy0s4q | 9q9j8qp02yms1tpjesmc |
+----------------------+----------------------+
SELECT
ST_GEOHASH(
TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
5) AS less_precise_geohash_a,
ST_GEOHASH(
TO_GEOGRAPHY('POINT(-122.323111 37.562333)'),
5) AS less_precise_geohash_b;
+------------------------+------------------------+
| LESS_PRECISE_GEOHASH_A | LESS_PRECISE_GEOHASH_B |
|------------------------+------------------------|
| 9q9j8 | 9q9j8 |
+------------------------+------------------------+
次の例では、ポリゴンのgeohashを返します。このポリゴンの境界ボックスの左下隅と右上隅は、前の例で使用したのと同じ2つの GEOGRAPHY ポイントです。この例に示すように、 ST_GEOHASH は、境界ボックスの左下隅と右上隅のbeohashに共通のプレフィックスを返します。
SELECT
ST_GEOHASH(
TO_GEOGRAPHY(
'POLYGON((-122.306100 37.554162, -122.306100 37.562333, -122.323111 37.562333, -122.323111 37.554162, -122.306100 37.554162))'
)
) AS geohash_of_polygon;
+--------------------+
| GEOHASH_OF_POLYGON |
|--------------------|
| 9q9j8 |
+--------------------+