2012-01-13 23 views
14

Duplicar posibles:.
Radius of multiple latitude/longitude points
distance calculations in mysql queries
select within 20 kilometers based on latitude/longituderadio de 40 kilometros utilizando latitud y longitud

Tengo una tabla MyISAM, que los datos se almacenan en los datos de incluye latitud y longitud para Google Maps. Lo que intento lograr es seleccionar todos los objetos dentro del radio de 40 kilómetros de la latitud y la longitud de la muestra.

Gracias!

+0

Hay que ir http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two -latitud-longitud-puntos –

+0

posible duplicado de [Radio de múltiples puntos de latitud/longitud] (http://stackoverflow.com/questions/2716622/radius-of-multiple-latitude-longitude-points) (y alrededor de otros 25, mira la barra lateral "Relacionada". Ésta parece un duplicado exacto: http://stackoverflow.com/questions/6919661/select-within-20-kilometers-based-on-latitude-longitude) – Piskvor

+1

prueba esta clase para ello, funciona bien: http://opengeodb.giswiki.org/wiki/GeoClass – Abadon

Respuesta

37

puedo utilizar esta consulta para obtener todos los puntos dentro de un $radius alrededor $lat/$lng:

SELECT 
    *, 
    (6371 * acos(cos(radians({$lat})) * cos(radians(`lat`)) * cos(radians(`lng`) - radians({$lng})) + sin(radians({$lat})) * sin(radians(`lat`)))) AS distance 
FROM `positions` 
HAVING distance <= {$radius} 
ORDER BY distance ASC 

6371 es el radio de la Tierra im km. Y no he inventado: http://code.google.com/intl/en/apis/maps/articles/phpsqlsearch.html https://developers.google.com/maps/articles/phpsqlsearch_v3#findnearsql (edit: URL cambiado)

+0

si tengo que usar en millas entonces tendré que cambiar (6371) ?? –

+0

El radio de la tierra en millas es '3959' - simplemente reemplace el número con eso y sus resultados estarán en millas en lugar de km. – DerVO

+0

ok gracias ...... –

Cuestiones relacionadas