メインコンテンツまでスキップ

ST_DISTANCE

説明

球面上の2つのジオメトリオブジェクト間の最短距離をメートル単位で計算します。この関数は計算に球面地球モデルを使用します。

経度と緯度の座標を受け取るST_DISTANCE_SPHEREとは異なり、ST_DISTANCEはジオメトリオブジェクト(点、線、ポリゴン、円など)をパラメータとして受け取り、それらの境界間の最短距離を計算します。2つの図形が交差する場合(接触や包含を含む)、0を返します。

構文

ST_DISTANCE( <shape1>, <shape2> )

パラメータ

パラメータ説明
<shape1>最初のジオメトリ。Point、Line、Polygon、Circle、MultiPolygonをサポート。
<shape2>2番目のジオメトリ。Point、Line、Polygon、Circle、MultiPolygonをサポート。

戻り値

2つのジオメトリオブジェクトの境界間の最短球面距離をメートル単位(DOUBLE型)で返します。

ST_DISTANCEには以下のエッジケースがあります:

  • 入力パラメータがNULLの場合、NULLを返します。
  • 入力パラメータが有効なジオメトリオブジェクトに解析できない場合、NULLを返します。
  • 2つのジオメトリオブジェクトが交差する場合(一方が他方を含む場合を含む)、0.0を返します。
  • サポートされるジオメトリタイプには以下が含まれます:POINTLINESTRINGPOLYGONCIRCLEMULTIPOLYGON

ポイント間の距離

-- 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_Point(0, 0), ST_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 |
+------------------------------------------------------+