カテゴリ:

地理空間関数

ST_GEOHASH

GEOGRAPHY または GEOMETRY オブジェクトの geohash を返します。geohashは、世界の場所を含む測地線の長方形を識別する、Base32の短い文字列です。

geohashの文字数によって精度が決まります。geohashの末尾から文字を削除すると、geohashの精度が低下し、より大きな長方形の領域が識別されます。

ST_GEOHASH 20文字の長さのgeohashを返します。オプションの precision 引数は、返されるgeohashの精度を指定します。たとえば、 precision5 を渡すと、精度の低い、短いgeohash(5文字)が返されます。

注釈

ポイントではない地理空間オブジェクトの場合、関数はデフォルトまたは precision の指定値に関係なく、精度の低いgeohashを返す可能性があります。

これらの場合、精度は空間オブジェクトの境界ボックスによって決定されます。ST_GEOHASH 最初に、境界ボックスの左下隅と右上隅のgeohashを決定し、次にこれら2つのgeohashに共通のプレフィックスを返します。

こちらもご参照ください。

ST_GEOGFROMGEOHASHST_GEOGPOINTFROMGEOHASH

構文

ST_GEOHASH( <geography_expression> [, <precision> ] )

ST_GEOHASH( <geometry_expression> [, <precision> ] )
Copy

引数

必須:

geography_expression

引数は GEOGRAPHY 型の式でなければなりません。

geometry_expression

引数は SRID 4326の型 GEOMETRY の式にする必要があります。

オプション:

precision

geohashで使用する文字数。 1 から 20 までの値を指定できます。

デフォルトでは、 precision20 であり、20文字の長さのgeohashを生成します。

戻り値

指定されたオブジェクトのgeohash(STRING 型の値)を返します。

オブジェクトがポリゴンであり、境界ボックスの2つのポイントが同じgeohashプレフィックスを共有していない場合、関数は空の文字列を返す可能性があります。

次の例は、 GEOGRAPHY ポイントのgeohashを返します。

SELECT ST_GEOHASH(
  TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
  AS geohash_of_point_a;
Copy
+----------------------+
| GEOHASH_OF_POINT_A   |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+

次の例では、同じ GEOGRAPHY ポイントのgeohashの精度を下げて返します。

SELECT ST_GEOHASH(
  TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
  5) AS less_precise_geohash_a;
Copy
+------------------------+
| LESS_PRECISE_GEOHASH_A |
|------------------------|
| 9q9j8                  |
+------------------------+

次の例は、 GEOMETRY ポイントのgeohashを返します。

SELECT ST_GEOHASH(
  TO_GEOMETRY('POINT(-122.306100 37.554162)', 4326))
  AS geohash_of_point_a;
Copy
+----------------------+
| 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;
Copy
+----------------------+----------------------+
| 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;
Copy
+------------------------+------------------------+
| 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;
Copy
+--------------------+
| GEOHASH_OF_POLYGON |
|--------------------|
| 9q9j8              |
+--------------------+