名前

ST_Distance — ジオメトリ型については、2つのジオメトリの、2次元の最小デカルト距離(空間参照系に基づきます)を、投影法の単位で返します。ジオグラフィ型については、デフォルトでは、2つのジオメトリ間の回転楕円体上の最小距離をメートル単位で返します。

概要

float ST_Distance(geometry g1, geometry g2);

float ST_Distance(geography gg1, geography gg2);

float ST_Distance(geography gg1, geography gg2, boolean use_spheroid);

説明

ジオメトリ型については、2つのジオメトリの、2次元の最小デカルト距離(空間参照系に基づきます)を、投影法の単位で返します。ジオグラフィ型については、デフォルトでは、2つのジオメトリ間の、WGS84回転楕円体上の最小距離をメートル単位で返します。回転楕円体の替わりに球面による答えを得るにはFALSEを渡します。

このメソッドはOpenGIS Simple Features Implementation Specification for SQL 1.1.に準拠しています。

このメソッドはSQL/MM仕様に準拠しています。 SQL-MM 3: 5.1.23

このメソッドは曲線ストリングと曲線に対応しています。

このメソッドはSFCGALを使っても提供されます。

初出: 1.5.0 1.5でジオグラフィが導入されました。大きいジオメトリや頂点の多いジオメトリについての速度が改善しました。

機能強化: 2.1.0で、ジオグラフィでの速度が向上しました。詳細についてはMaking Geography fasterを参照して下さい。

機能強化: 2.1.0で、曲線ジオメトリ対応が導入されました。

基本的なジオメトリの例

-- ジオメトリの例 - 平面上の度単位 4326はWGS84経度緯度 単位は度
SELECT ST_Distance(
                ST_GeomFromText('POINT(-72.1235 42.3521)',4326),
                ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326)
        );
st_distance
-----------------
0.00150567726382282

-- ジオメトリの例 - メートル単位 (SRID: 26986 マサチューセッツマサチューセッツ州メートル平面) (マサチューセッツについては最も高精度)
SELECT ST_Distance(
                        ST_Transform(ST_GeomFromText('POINT(-72.1235 42.3521)',4326),26986),
                        ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326),26986)
                );
st_distance
-----------------
123.797937878454

-- ジオメトリの例 - メートル単位 (SRID: 2163 米国ナショナルアトラス正積図法) (最も低精度)
SELECT ST_Distance(
                        ST_Transform(ST_GeomFromText('POINT(-72.1235 42.3521)',4326),2163),
                        ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326),2163)
                );

st_distance
------------------
126.664256056812

ジオグラフィの例

-- ジオメトリの例と同じですが、メートル単位になります
-- 球面を使うと若干速度が向上し精度が低下します。 same as geometry example but note units in meters - use sphere for slightly faster less accurate
SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist 
FROM (SELECT
        ST_GeographyFromText('SRID=4326;POINT(-72.1235 42.3521)') As gg1,
        ST_GeographyFromText('SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)') As gg2
        ) As foo  ;

  spheroid_dist   |   sphere_dist
------------------+------------------
 123.802076746848 | 123.475736916397

関連情報

ST_3DDistance, ST_DWithin, ST_Distance_Sphere, ST_Distance_Spheroid, ST_MaxDistance, ST_Transform