に最終更新
ST_DISTANCE
説明
二つのジオメトリオブジェクト間の球面上の最短距離をメートル単位で計算します。この関数は、球体としての地球モデルを使用して計算します。
経度と緯度の座標を受け取る ST_DISTANCE_SPHERE とは異なり、ST_DISTANCE はジオメトリオブジェクト(点、線、ポリゴン、円など)をパラメータとして受け取り、それぞれの境界間の最短距離を計算します。二つの図形が交差する場合(接する場合や一方が他方を含む場合を含む)は、0 を返します。
構文
ST_DISTANCE( <shape1>, <shape2> )
パラメータ
| パラメータ | 説明 |
|---|---|
<shape1> | 最初のジオメトリ。Point、Line、Polygon、Circle、MultiPolygon をサポートします。 |
<shape2> | 二番目のジオメトリ。Point、Line、Polygon、Circle、MultiPolygon をサポートします。 |
戻り値
二つのジオメトリオブジェクトの境界間の球面上の最短距離をメートル単位で返します(DOUBLE 型)。
ST_DISTANCE には次の境界ケースがあります。
- いずれかの入力パラメータが
NULLの場合、NULLを返します。 - いずれかの入力パラメータを有効なジオメトリオブジェクトとして解析できない場合、
NULLを返します。 - 二つのジオメトリオブジェクトが交差する場合(一方が他方を含む場合を含む)、
0.0を返します。 - サポートされるジオメトリ型は、
POINT、LINESTRING、POLYGON、CIRCLE、MULTIPOLYGONです。
例
点と点の距離
-- Calculate the distance between two points with a 1-degree longitude difference on the equator
SELECT ST_DISTANCE(ST_GeometryFromText('POINT(0 0)'), ST_GeometryFromText('POINT(1 0)'));
+------------------------------------------------------------------------------------+
| ST_DISTANCE(ST_GeometryFromText('POINT(0 0)'), ST_GeometryFromText('POINT(1 0)')) |
+------------------------------------------------------------------------------------+
| 111195.1011774839 |
+------------------------------------------------------------------------------------+
点と線の距離
-- Calculate the shortest distance from a point to a line
SELECT ST_DISTANCE(ST_GeometryFromText('POINT(2 2)'), ST_GeometryFromText('LINESTRING(0 0, 10 0)'));
+----------------------------------------------------------------------------------------------+
| ST_DISTANCE(ST_GeometryFromText('POINT(2 2)'), ST_GeometryFromText('LINESTRING(0 0, 10 0)')) |
+----------------------------------------------------------------------------------------------+
| 222390.2023549678 |
+----------------------------------------------------------------------------------------------+
ポリゴンと円の交差(距離 0)
-- Circle intersects polygon; the center is outside but the circle covers part of the polygon's boundary
SELECT ST_DISTANCE(
ST_GeometryFromText('POLYGON ((-0.00045 -0.00045, 0.00045 -0.00045, 0.00045 0.00045, -0.00045 0.00045, -0.00045 -0.00045))'),
ST_Circle(0.0006, 0, 50)
);
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ST_DISTANCE(
ST_GeometryFromText('POLYGON ((-0.00045 -0.00045, 0.00045 -0.00045, 0.00045 0.00045, -0.00045 0.00045, -0.00045 -0.00045))'),
ST_Circle(0.0006, 0, 50)
) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
無効なパラメータ(NULL を返す)
-- Invalid WKT string
SELECT ST_DISTANCE(ST_GeometryFromText('NOT_A_GEOMETRY'), ST_GeometryFromText('POINT(1 1)'));
+---------------------------------------------------------------------------------------+
| ST_DISTANCE(ST_GeometryFromText('NOT_A_GEOMETRY'), ST_GeometryFromText('POINT(1 1)')) |
+---------------------------------------------------------------------------------------+
| NULL |
+---------------------------------------------------------------------------------------+
NULL パラメータ
SELECT ST_DISTANCE(NULL, ST_GeometryFromText('POINT(1 1)'));
+------------------------------------------------------+
| ST_DISTANCE(NULL, ST_GeometryFromText('POINT(1 1)')) |
+------------------------------------------------------+
| NULL |
+------------------------------------------------------+