2011-10-16 25 views
5

que tienen una base de datos de coordenadas en el esquema:¿Seleccionar coordenadas que caen dentro de un radio de un punto central?

ID: Latitud: Longitud: Nombre: desc

He creado mi aplicación de Google Maps para mostrar los marcadores de eficacia en la pantalla. Sin embargo, necesito agregar otra característica mediante la cual el usuario puede ver todos los punteros que se encuentran dentro del radio desde un punto central.

¿cómo iba a escribir una instrucción SQL del tipo:

Select all pointers that fall within a 10 mile radius of X & Y 

Respuesta

2

Es probable que tenga que hacer esto en dos pasos. Seleccione los puntos que se encuentran dentro de un cuadrado de 20 millas con su centro en X, Y. Suponiendo que se calcula la parte superior, derecha e inferior, las coordenadas correctas de la plaza de primera, usted puede obtener todos los puntos del interior de la plaza de la base de datos con:

select * from coordinates where longitude < right and longitude > left and 
latitude < top and latitude > bottom; 

El segundo paso es ver si el conjunto de puntos está en el interior el círculo de 10 millas de radio. En este punto, me sentiría tentado a utilizar los mapas de Google para calcular la distancia entre los puntos y el centro de tu cuadrado usando la función google.maps.geometry.spherical.computeDistanceBetween(from:LatLng, to:LatLng, radius?:number). Verifique que la respuesta es menos de 10 millas. Esta función usa el radio de la tierra como predeterminado.

+0

esto iba a funcionar (a menos que Está demasiado al norte o al sur, cerca de los polos, donde su cuadrado se parecería más a un trapecio (trapecio) o incluso a un triángulo). –

13

El SQL a continuación debería funcionar:

SELECT * FROM Table1 a 
WHERE (
      acos(sin(a.Latitude * 0.0175) * sin(YOUR_LATITUDE_X * 0.0175) 
       + cos(a.Latitude * 0.0175) * cos(YOUR_LATITUDE_X * 0.0175) *  
       cos((YOUR_LONGITUDE_Y * 0.0175) - (a.Longitude * 0.0175)) 
      ) * 3959 <= YOUR_RADIUS_INMILES 
    ) 

Esto se basa en la ley esférica de los cosenos, para obtener información más detallada sobre el tema, echa un vistazo a este artículo - http://www.movable-type.co.uk/scripts/latlong.html

+0

La latitud es Y, la longitud es X. ¿Qué significa que en este caso? – CompanyDroneFromSector7G

+0

Esto funcionó muy bien! Para un radio en Km en lugar de millas, reemplace 3959 con 6371 e ingrese su radio en km. – SAR622

Cuestiones relacionadas