2009-12-13 20 views
17

Digamos que tengo una tabla de filas que contienen coordenadas.Determinar si una coordenada está en el radio de otra

¿Cuál sería la mejor manera de tirar solo las filas de coordenadas que están en el radio de otra coordenada?

Para simplificar mi pregunta, yo estoy dando el siguiente ejemplo:

Table like: 
Columns: Latitude, Longitude. 
Row1: 23.44444 24.55555 
Row2: 32.44444 28.22222 
Row3: 35.11111 32.12345 

En una sentencia SQL, cómo consigo las filas de coordenadas que se encuentran en el radio de Row3 por ejemplo?

Respuesta

29

Este post muestra cómo hacerlo en SQL Server.

Y aquí es cómo hacerlo en MySQL:

SELECT ((ACOS(SIN($lat * PI()/180) * SIN(lat * PI()/180) + 
     COS($lat * PI()/180) * COS(lat * PI()/180) * COS(($lon - lon) * 
     PI()/180)) * 180/PI()) * 60 * 1.1515) AS distance 
FROM members 
HAVING distance<='10' ORDER BY distance ASC 
+0

Gracias, ¿cómo puedo usarlo en una base de datos de acceso? –

+0

Hasta donde yo sé, no puede crear este tipo de función en una Base de datos de acceso. Deberías probar el segundo enfoque. (Se necesitarán algunas modificaciones. Creo que el acceso no tiene una función PI(), por ejemplo) – jbochi

+0

¿Esto es en millas o kilómetros? – Pentium10

0

¿Qué quiere decir por la radio de? ¿Quieres pasar una distancia, decir 5 millas, y encontrar todas las filas dentro de 5 millas de la fila x?

mira esto si es así http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

+0

Sí, estaría usando kilómetros pero tienes la idea. La cosa es que lo necesito para un acceso db. –

+0

Usa una función VBA, hay muchos fragmentos de código googleables para adaptar. –

1

se parece a la fórmula de la distancia es:

D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) + 
         cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi/180) 
       ) * 180/pi) 

donde Y y Z - son puntos de cada fila whant a prueba, y Y y Z - son puntos de la fila de ejemplo.

lo que podría hacer tal cosa:

  1. seleccione cada fila en la tabla y obtener su lon y lat.
  2. aplican consulta desde this, cambiando $lon y $lat a punto 1.

formulario de datos que no sé cómo hacer esto en el acceso. Pero de esta manera es tan estrecho como lento.

Cuestiones relacionadas