MySQL 8.0 リファレンスマニュアル


12.17.7.2 Pointプロパティー関数

Point は X 座標と Y 座標で構成され、それぞれ ST_X() 関数と ST_Y() 関数を使用して取得できます。 これらの関数では、X または Y 座標値を指定するオプションの第 2 引数も許可されます。この場合、関数の結果は最初の引数の Point オブジェクトになり、X 座標または Y 座標が 2 番目の引数と等しくなるように変更されます。

地理空間参照システム (SRS) を持つ Point オブジェクトの場合、経度および緯度は、それぞれ ST_Longitude() 関数および ST_Latitude() 関数を使用して取得できます。 これらの関数では、経度または緯度の値を指定するオプションの第 2 引数も許可されます。この場合、関数の結果は、経度または緯度が変更された最初の引数の Point オブジェクトとなり、2 番目の引数と等しくなります。

特に指定がないかぎり、このセクションの関数はジオメトリ引数を次のように処理します:

  • いずれかの引数が NULL の場合、戻り値は NULL です。

  • ジオメトリ引数が有効なジオメトリであるが、Point オブジェクトではない場合、ER_UNEXPECTED_GEOMETRY_TYPE エラーが発生します。

  • ジオメトリ引数が構文的に整形式のジオメトリでない場合は、ER_GIS_INVALID_DATA エラーが発生します。

  • 未定義の空間参照システム (SRS) でジオメトリ引数が構文的に整形式のジオメトリである場合、ER_SRS_NOT_FOUND エラーが発生します。

  • X または Y 座標引数が指定され、値が -inf+inf または NaN の場合、ER_DATA_OUT_OF_RANGE エラーが発生します。

  • 経度または緯度の値が範囲外の場合は、エラーが発生します:

    • 経度の値が (−180, 180]の範囲にない場合は、ER_LONGITUDE_OUT_OF_RANGE エラーが発生します。

    • 緯度の値が[−90, 90]の範囲にない場合は、ER_LATITUDE_OUT_OF_RANGE エラーが発生します。

    表示される範囲は度数です。 浮動小数点演算のため、正確な範囲制限はわずかに偏差します。

  • それ以外の場合、戻り値は NULL 以外です。

ポイントプロパティを取得するには、次の関数を使用できます:

  • ST_Latitude(p [, new_latitude_val])

    地理空間参照システム (SRS) を持つ有効な Point オブジェクト p を表す単一の引数を使用すると、ST_Latitude()p の緯度値を倍精度数値として返します。

    有効な緯度値を表すオプションの第 2 引数を使用すると、ST_Latitude() は、最初の引数のように、緯度が 2 番目の引数と等しい Point オブジェクトを返します。

    ST_Latitude() では、このセクションの概要で説明されているように引数が処理されますが、Point オブジェクトは有効ですが地理 SRS がない場合は、ER_SRS_NOT_GEOGRAPHIC エラーが発生します。

    mysql> SET @pt = ST_GeomFromText('POINT(45 90)', 4326);
    mysql> SELECT ST_Latitude(@pt);
    +------------------+
    | ST_Latitude(@pt) |
    +------------------+
    |               45 |
    +------------------+
    mysql> SELECT ST_AsText(ST_Latitude(@pt, 10));
    +---------------------------------+
    | ST_AsText(ST_Latitude(@pt, 10)) |
    +---------------------------------+
    | POINT(10 90)                    |
    +---------------------------------+

    この関数は、MySQL 8.0.12 で追加されました。

  • ST_Longitude(p [, new_longitude_val])

    地理空間参照システム (SRS) を持つ有効な Point オブジェクト p を表す単一の引数を使用すると、ST_Longitude()p の経度値を倍精度数値として返します。

    オプションの第 2 引数が有効な経度値を表す場合、ST_Longitude() は、経度が 2 番目の引数と等しい最初の引数のような Point オブジェクトを返します。

    ST_Longitude() では、このセクションの概要で説明されているように引数が処理されますが、Point オブジェクトは有効ですが地理 SRS がない場合は、ER_SRS_NOT_GEOGRAPHIC エラーが発生します。

    mysql> SET @pt = ST_GeomFromText('POINT(45 90)', 4326);
    mysql> SELECT ST_Longitude(@pt);
    +-------------------+
    | ST_Longitude(@pt) |
    +-------------------+
    |                90 |
    +-------------------+
    mysql> SELECT ST_AsText(ST_Longitude(@pt, 10));
    +----------------------------------+
    | ST_AsText(ST_Longitude(@pt, 10)) |
    +----------------------------------+
    | POINT(45 10)                     |
    +----------------------------------+

    この関数は、MySQL 8.0.12 で追加されました。

  • ST_X(p [, new_x_val])

    有効な Point オブジェクト p を表す単一の引数を使用すると、ST_X()p の X 座標値を倍精度数値として返します。 MySQL 8.0.12 では、X 座標は Point 空間参照システム (SRS) 定義で最初に表示される軸を参照しているとみなされます。

    オプションの second 引数を指定すると、ST_X() は、X 座標が 2 番目の引数と等しい最初の引数のような Point オブジェクトを返します。 MySQL 8.0.12 では、Point オブジェクトに地理 SRS がある場合、2 番目の引数は経度または緯度の値の適切な範囲内にある必要があります。

    ST_X() は、このセクションの概要で説明されているように引数を処理します。

    mysql> SELECT ST_X(Point(56.7, 53.34));
    +--------------------------+
    | ST_X(Point(56.7, 53.34)) |
    +--------------------------+
    |                     56.7 |
    +--------------------------+
    mysql> SELECT ST_AsText(ST_X(Point(56.7, 53.34), 10.5));
    +-------------------------------------------+
    | ST_AsText(ST_X(Point(56.7, 53.34), 10.5)) |
    +-------------------------------------------+
    | POINT(10.5 53.34)                         |
    +-------------------------------------------+
  • ST_Y(p [, new_y_val])

    有効な Point オブジェクト p を表す単一の引数を使用すると、ST_Y()p の Y 座標値を倍精度の数値として返します。 MySQL 8.0.12 では、Y 座標は Point 空間参照システム (SRS) 定義で次に表示される軸を参照しているとみなされます。

    オプションの second 引数を指定すると、ST_Y() は、Y 座標が 2 番目の引数と等しい最初の引数のような Point オブジェクトを返します。 MySQL 8.0.12 では、Point オブジェクトに地理 SRS がある場合、2 番目の引数は経度または緯度の値の適切な範囲内にある必要があります。

    ST_Y() は、このセクションの概要で説明されているように引数を処理します。

    mysql> SELECT ST_Y(Point(56.7, 53.34));
    +--------------------------+
    | ST_Y(Point(56.7, 53.34)) |
    +--------------------------+
    |                    53.34 |
    +--------------------------+
    mysql> SELECT ST_AsText(ST_Y(Point(56.7, 53.34), 10.5));
    +-------------------------------------------+
    | ST_AsText(ST_Y(Point(56.7, 53.34), 10.5)) |
    +-------------------------------------------+
    | POINT(56.7 10.5)                          |
    +-------------------------------------------+

関連キーワード:  関数, Point, 空間, オブジェクト, 座標, ジオメトリ, 経度, 緯度, 参照, Longitude