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
初出: 1.5.0 1.5でジオグラフィが導入されました。大きいジオメトリや頂点の多いジオメトリについての速度が改善しました。
-- ジオメトリの例 - 平面上の度単位 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
-- Geometry example - units in meters (SRID: 26986 Massachusetts state plane meters) (most accurate for Massachusetts)
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
-- ジオグラフィの例 - 同じですがメートル単位になっている点に注意
-- 球面を使うと若干速度が向上し精度が低下します
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