ST_DistanceSphere - Amazon Redshift

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