2011-04-04 33 views
6

¿Está bien comparar distancias de una manera clásica (distancia entre 2 puntos: d = sqrt(pow(lat2-lat1, 2) + pow(lon2-lon1, 2))) usando la latitud y la longitud devuelta desde google apis sin ninguna transformación a metros o sth? Lo necesito solo para una comparación para encontrar el punto más cercano de una serie de puntos a un punto de referencia. Por ejemplo:Distancia entre dos lat, lon puntos

digamos que tenemos dos (lat, lon) puntos: (40.2535425,22.88245345) y (40.2565795,22.8884539) y queremos encontrar bruja está más cerca de (40.2335425,22.83245345). ¿Está bien aplicar el código anterior para encontrar las distancias? O necesitamos encontrar la distancia, digamos en metros (usando la fórmula de haversine o lo que sea), primero para cada punto del punto de referencia y luego comparar los valores?

Hago esta pregunta porque no sé exactamente cuáles son los valores devueltos por google apis como lat, lon! Quiero decir que no son grados min-sec, ¿verdad?

Gracias ...

+0

Google 'gran distancia' - usted debe ser capaz de pasar estos valores largos del lat de funciones estandarizadas para obtener distancias a lo largo de la Superficie de la tierra. – Randy

+0

Cerca de los polos, la longitud actúa graciosamente. En +/- 90 grados de latitud, un grado de longitud == 0 de distancia. Así que me imagino que el camino de Pitágoras no funcionará en todas partes. – cHao

+0

Si está justo después del más cercano, no haga la raíz cuadrada en los cálculos. Si a

Respuesta

1

No, porque las líneas de longitud convergen hacia los polos. Si sus puntos son relativamente próximos entre sí, se puede aproximar la distancia de este modo:

d = sqrt(pow(lat2-lat1, 2) + cos(lat1)*pow(lon2-lon1, 2)) 

Si necesita una mayor precisión a grandes distancias, hay varias fórmulas de lujo para el cálculo de great-circle distances, pero me resulta más fácil de convertir a coordenadas 3D en un círculo de la unidad y luego hacer una distancia de Pitágoras simple, seguido de 2 sen -1 (d /2) para convertir de nuevo a un ángulo (aunque puedo entender que algunos podrían encontrar no encuentran esto más sencillo,: -)

+0

Hay una fórmula de JavaScript para calcular la distancia de gran círculo, http://stackoverflow.com/a/27943/368691. – Gajus

+0

¿Puede "d" transformarse de alguna manera en metros/millas? Lo estoy preguntando porque estoy confundido por el hecho de que, dado que hay 180 grados de latitud pero 360 de longitud, creo que "d" solo puede ser útil para comparar distancias pero no para calcular distancias absolutas ... Pero hubiera se muy feliz si "d" se puede transformar de alguna manera :) – ZioBit

1

También puede utilizar el computeDistanceBetween() de la nueva Biblioteca de geometría, que creo que devuelve la distancia en metros

Cuestiones relacionadas