terrestres puntos metros mapa latitudes google geograficos entre distancia coordenadas calcular iphone math map coordinates latitude-longitude

iphone - metros - ¿Cómo calculo la distancia entre dos puntos de latitud y longitud?



distancia entre latitudes (3)

Esta pregunta ya tiene una respuesta aquí:

Tengo latitud y longitud de un lugar en particular y quiero calcular la distancia, ¿cómo puedo calcularla?


Este podría no ser el método más eficiente para hacerlo, pero funcionará.

Sus dos ubicaciones especificadas por latitud y longitud se pueden considerar vectores. Suponiendo que las coordenadas se han convertido en coordenadas de cartesión, calcule el producto de puntos de los dos vectores.

Dado v1 = (x1, y1, z1) y v2 = (x2, y2, z2), entonces ...

v1 dot v2 = magnitude(v1) * magnitude(v2) * cos (theta)

Convenientemente, la magnitud de v1 y v2 será la misma ... el radio de la tierra (R).

x1*x2 + y1*y2 + z1*z2 = R*R*cos(theta)

Resuelve para theta.

theta = acos ((x1*x2 + y1*y2 + z1*z2) / (R * R));

Ahora tienes un ángulo entre los dos vectores en radianes. La distancia entre los dos puntos cuando se viaja por la superficie de la tierra es así ...

distance = theta * R.

Probablemente haya una manera más fácil de hacer esto completamente dentro del contexto de coordenadas esféricas, pero mi matemática en esa área es demasiado borrosa, de ahí la conversión a coordenadas cartesianas.

Para convertir a coordenadas cartesianas ...

Deje que alfa sea la latitud y beta la longitud.

x = R * cos (alpha) * cos (beta) y = R * sin (alpha) z = R * cos (alpha) * sin (beta)

No olvide que la función matemática generalmente se trata en radianes, y la latitud / longitud trata en grados.


He corrido a través de las matemáticas, y ahora puedo simplificar enormemente la solución.

Imagina si giramos la tierra para que nuestro primer vector esté en 0 grados de latitud y 0 grados de longitud. El segundo vector estaría en (alfa2 - alfa1) grados de latitud y (beta2 - beta1) grados de latitud.

Ya que ...

sin(0) = 0 and cos(0) = 1

nuestro producto punto simplifica a ...

cos(delta_alpha) * cos(delta_beta) = cos(theta)

El resto de las matemáticas permanece sin cambios.

theta = acos (cos(delta_alpha) * cos(delta_beta)) distance = radius * theta

Espero que esto ayude.


CLLocation *location1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:long1]; CLLocation *location2 = [[CLLocation alloc] initWithLatitude:lat2 longitude:long2]; NSLog(@"Distance i meters: %f", [location1 distanceFromLocation:location2]); [location1 release]; [location2 release];

También necesita agregar CoreLocation.framework a su proyecto y agregar la declaración de importación:

#import <CoreLocation/CoreLocation.h>