ST_DistanceSphere
ST_DistanceSphere は、球面の 2 つのポイントのジオメトリ間の距離を返します。
構文
ST_DistanceSphere(geom1, geom2)
ST_DistanceSphere(geom1, geom2, radius)
引数
- geom1
-
球面のデータ型
GEOMETRY
の角度のポイント値。ポイントの最初の座標は経度の値です。ポイントの 2 番目の座標は緯度の値です。3DZ、3DM、または 4D ジオメトリの場合、最初の 2 つの座標のみが使用されます。 - geom2
-
球面のデータ型
GEOMETRY
の角度のポイント値。ポイントの最初の座標は経度の値です。ポイントの 2 番目の座標は緯度の値です。3DZ、3DM、または 4D ジオメトリの場合、最初の 2 つの座標のみが使用されます。 - radius
-
データ型
DOUBLE PRECISION
の球の半径。radius が指定されていない場合、球体はデフォルトで地球に設定され、半径は楕円体の WGS (World Geodetic System) 84 表現から計算されます。
戻り型
半径と同じユニットの DOUBLE PRECISION
。半径が指定されていない場合、距離はメートル単位です。
geom1 または geom2 が null または空の場合、null が返されます。
radius が指定されていない場合、地球の表面に沿った結果がメートルで表示されます。
radius が負数である場合、エラーが返されます。
geom1 および geom2 の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。
geom1 または geom2 がポイントでない場合、エラーが返されます。
例
次の SQL の例では、地球上の 2 点間の距離をキロメートル単位で計算します。
SELECT ROUND(ST_DistanceSphere(ST_Point(-122, 47), ST_Point(-122.1, 47.1))/ 1000, 0);
round
-----------
13
次の SQL の例では、ドイツのベルリンテーゲル空港 (TXL)、ミュンヘン空港 (MUC)、フランクフルト空港 (FRA) の 3 つのポイントの場所の間の距離をキロメートルで計算します。
WITH airports_raw(code,lon,lat) AS ( (SELECT 'MUC', 11.786111, 48.353889) UNION (SELECT 'FRA', 8.570556, 50.033333) UNION (SELECT 'TXL', 13.287778, 52.559722)), airports1(code,location) AS (SELECT code, ST_Point(lon, lat) FROM airports_raw), airports2(code,location) AS (SELECT * from airports1) SELECT (airports1.code || ' <-> ' || airports2.code) AS airports, round(ST_DistanceSphere(airports1.location, airports2.location) / 1000, 0) AS distance_in_km FROM airports1, airports2 WHERE airports1.code < airports2.code ORDER BY 1;
airports | distance_in_km
-------------+----------------
FRA <-> MUC | 299
FRA <-> TXL | 432
MUC <-> TXL | 480