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 计算位于德国的三个机场位置之间的距离(以公里为单位):Berlin Tegel (TXL)、Munich International (MUC) 和 Frankfurt International (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