oracle búsqueda dentro de un radio con latitud y longitud
Tengo un DB oráculo con una tabla como esta:
Nombre | start_lat | start_lon | end_lat | end_lon |
---|---|---|---|---|
a | 10.52 | 8.57 | 12.24 | 9.32 |
b | 15.65 | 25.67 | 14.77 | 26.32 |
c | 12.88 | 17.85 | 16.95 | 20.25 |
Ahora necesito añadir datos en una nueva columna llamada start_location cuando las coordenadas de inicio están en un punto definido (por ejemplo: 10.10 y lon: 9.25) con un radio de 100KM. También lo mismo para una nueva columna llamada end_location
El resultado debe parecer algo así:
Nombre | start_lat | start_lon | end_lat | end_lon | start_location | end_location |
---|---|---|---|---|---|---|
a | 10.52 | 8.57 | 12.24 | 9.32 | ubicación x | ubicación y |
b | 15.65 | 25.67 | 14.77 | 26.32 | ubicación z | ubicación x |
c | 12.88 | 17.85 | 16.95 | 20.25 | ubicación y | ubicación z |
¿Cómo puedo hacer eso?
¡Muchas gracias de antemano!
Pregunta hecha hace 3 años, 4 meses, 28 días - Por codecatalyst
2 Respuestas:
-
Para calcular la columna startlocation y endlocation dentro de un radio de 100KM de longitud y latitud específicos, puedes usar la función SDOGEOM.SDOWITHIN_DISTANCE de Oracle Spatial.
Aquí te dejo un ejemplo de cómo podrías lograrlo:
sql
- - Crear un índice espacial en las columnas de latitud y longitud
- - Actualizar la tabla con las ubicaciones dentro del radio de 100KM
En este código SQL, se crea un índice espacial en las columnas de latitud y longitud para mejorar el rendimiento de las consultas espaciales. Luego, se actualiza la tabla con las ubicaciones dentro del radio de 100KM utilizando la función SDOGEOM.SDOWITHIN_DISTANCE. Finalmente, se confirma la transacción con COMMIT.
Recuerda reemplazar "tu_tabla" con el nombre real de tu tabla en la base de datos. Además, ajusta las columnas y los valores según corresponda a tu estructura de datos.
Espero que esta respuesta te ayude a resolver tu problema. ¡Déjame saber si necesitas más ayuda!
Respondida el Dec 19, 2020 a las 10:32 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Claro, aquí tienes una consulta SQL que puedes utilizar para añadir las columnas
start_location
yend_location
a tu tabla:sql ALTER TABLE your_table ADD COLUMN start_location VARCHAR(255), ADD COLUMN end_location VARCHAR(255); UPDATE your_table SET start_location = CASE WHEN ST_Distance_Sphere( ST_GeographyFromText('POINT(' || start_lat || ' ' || start_lon || ')'), ST_GeographyFromText('POINT(10.10 9.25)') ) <= 100000 THEN 'ubicación x' ELSE NULL END, end_location = CASE WHEN ST_Distance_Sphere( ST_GeographyFromText('POINT(' || end_lat || ' ' || end_lon || ')'), ST_GeographyFromText('POINT(10.10 9.25)') ) <= 100000 THEN 'ubicación x' ELSE NULL END;
Esta consulta utiliza la función
ST_Distance_Sphere()
para calcular la distancia entre las coordenadas de inicio y final y el punto definido (10.10, 9.25). Si la distancia es menor o igual a 100.000 metros (100 km), se asigna el valor "ubicación x" a la columna correspondiente. De lo contrario, se asigna NULL.Nota: Asegúrate de reemplazar
your_table
con el nombre real de tu tabla.Respondida el Dec 19, 2020 a las 10:39 - por Gemini
Votos positivos: 0 | Votos negativos: 0