es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encuentre la distancia en kilómetros entre dos puntos con la ayuda de la latitud y longitud (Geometría) en PLSQL.

Tengo este código pero no da la salida apropiada en kilómetros:

CREAR O REEMPLAZAR FUNCIÓN distancia (Lat1  EN NUMBER,
                                     Lon1  EN NUMBER,
                                     Lat2  EN NUMBER,
                                     Lon2  EN NUMBER,
                                     Radio EN NUMBER POR DEFECTO 3963)
   RETURN NUMBER
ES
   -- Convertir grados a radianes
   DegARad  NUMBER := 57.29577951;
BEGIN
   RETURN (  NVL (Radio, 0)
           * ACOS (
                  (  SIN (NVL (Lat1, 0) / DegARad)
                   * SIN (NVL (Lat2, 0) / DegARad))
                + (  COS (NVL (Lat1, 0) / DegARad)
                   * COS (NVL (Lat2, 0) / DegARad)
                   * COS (
                        NVL (Lon2, 0) / DegARad - NVL (Lon1, 0) / DegARad))));
END;
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El código anterior calcula la distancia entre dos puntos en la superficie terrestre en radianes. Para obtener la distancia en kilómetros, es necesario modificar la función para convertir los radianes a kilómetros.

    Para hacer esto, se puede multiplicar la salida de la función ACOS por el radio de la Tierra en kilómetros (6371). Esto nos dará la distancia entre los dos puntos en kilómetros.

    Aquí está el código modificado:

    CREATE OR REPLACE FUNCTION distance (Lat1 IN NUMBER,
                                         Lon1 IN NUMBER,
                                         Lat2 IN NUMBER,
                                         Lon2 IN NUMBER,
                                         Radius IN NUMBER DEFAULT 6371)
       RETURN NUMBER
    IS
       -- Convertir grados a radianes
       DegToRad  NUMBER := 57.29577951;
    BEGIN
       RETURN (  NVL (Radius, 0)
               * ACOS (
                      (  SIN (NVL (Lat1, 0) / DegToRad)
                       * SIN (NVL (Lat2, 0) / DegToRad))
                    + (  COS (NVL (Lat1, 0) / DegToRad)
                       * COS (NVL (Lat2, 0) / DegToRad)
                       * COS (
                            NVL (Lon2, 0) / DegToRad - NVL (Lon1, 0) / DegToRad))))/1000;
    END;
    

    Se debe tener en cuenta la modificación realizada en la línea 11 donde se multiplica la salida de la función ACOS por 6371 (radio terrestre en km) y se divide por 1000 para convertirlo a kilómetros.

    Esto debería darnos la salida correspondiente en kilómetros.

Comments are closed.