本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ST_ DistanceSphere
ST_ 會DistanceSphere 傳回位於球面上的兩點幾何圖形之間的距離。
語法
ST_DistanceSphere(geom1, geom2)
ST_DistanceSphere(geom1, geom2, radius)
引數
- geom1
-
球面上
GEOMETRY
資料類型的點值,單位為度。點的第一個座標是經度值。點的第二個座標是緯度值。對於 3DZ、3DM 或 4D 幾何,僅使用前兩個座標。 - geom2
-
球面上
GEOMETRY
資料類型的點值,單位為度。點的第一個座標是經度值。點的第二個座標是緯度值。對於 3DZ、3DM 或 4D 幾何,僅使用前兩個座標。 - radius
-
DOUBLE PRECISION
資料類型的球面半徑。如果沒有提供 radius,則球面會預設為地球,且會從橢球的全球測量系統 (WGS) 84 表示法運算半徑。
傳回類型
與半徑單位相同的 DOUBLE PRECISION
。如果未提供半徑,則距離以公尺為單位。
如果 geom1 或 geom2 為 Null 或空白,則會傳回 Null。
如果沒有提供 radius,則結果的單位會是沿著地球表面的公尺數。
如果 radius 為負數,則會傳回錯誤。
如果 geom1 和 geom2 的空間參考系統識別碼 (SRID) 不同,則會傳回錯誤。
如果 geom1 或 geom2 不是點,則會傳回錯誤。
範例
以下範例 SQL 會計算地球上兩點之間的距離 (以公里為單位)。
SELECT ROUND(ST_DistanceSphere(ST_Point(-122, 47), ST_Point(-122.1, 47.1))/ 1000, 0);
round
-----------
13
以下範例 SQL 會運算德國三個機場位置間的距離 (公里):柏林泰格爾機場 (TXL)、慕尼黑國際機場 (MUC) 及法蘭克福國際機場 (FRA)。
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