ST_DistanceSphere
ST_DistanceSphere devuelve la distancia entre dos geometrías de puntos que están en una esfera.
Sintaxis
ST_DistanceSphere(geom1, geom2)
ST_DistanceSphere(geom1, geom2, radius)
Argumentos
- geom1
-
Un valor de punto en grados de tipo de datos
GEOMETRY
que está en una esfera. La primera coordenada del punto es el valor de la longitud. La segunda coordinada del punto es el valor de la latitud. En el caso de las geometrías 3DZ, 3DM o 4D, solo se utilizan las dos primeras coordenadas. - geom2
-
Un valor de punto en grados de tipo de datos
GEOMETRY
que está en una esfera. La primera coordenada del punto es el valor de la longitud. La segunda coordinada del punto es el valor de la latitud. En el caso de las geometrías 3DZ, 3DM o 4D, solo se utilizan las dos primeras coordenadas. - radius
-
El radio de una esfera de tipo de datos
DOUBLE PRECISION
. Si no se proporciona radius, la esfera por defecto es la Tierra y el radio se computa a partir de la representación del sistema geodésico mundial (WGS) 84 del elipsoide.
Tipo de retorno
DOUBLE PRECISION
en las mismas unidades que el radio. Si no se proporciona ningún radio, la distancia se indica en metros.
Si geom1 o geom2 son null o empty, entonces se devuelve el valor null.
Si no se proporciona ningún radius, el resultado en metros es la superficie de la Tierra.
Si radius es un número negativo, se devuelve un error.
Si geom1 y geom2 no tienen el mismo valor en el identificador de sistema de referencia espacial (SRID), se devuelve un error.
Si geom1 o geom2 no son un punto, se devuelve un error.
Ejemplos
En el siguiente ejemplo de SQL se calcula la distancia en kilómetros entre dos puntos de la Tierra.
SELECT ROUND(ST_DistanceSphere(ST_Point(-122, 47), ST_Point(-122.1, 47.1))/ 1000, 0);
round
-----------
13
El siguiente SQL de ejemplo computa la distancia en kilómetros entre las ubicaciones de tres aeropuertos en Alemania: Berlin Tegel (TXL), Munich International (MUC) y 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