2011-04-05 5 views
5

Esta es la primera vez que hago una pregunta aquí, pero he encontrado mucha ayuda de las preguntas de otras personas.Orden de los objetos CLLocation en -distanceFromLocation:

Mi pregunta se refiere a la función -distanceFromLocation: en CLLocation. Había supuesto que encontrar la distancia entre el punto A y el punto B sería la misma que entre el punto B y el punto A, pero he descubierto que no lo es. He probado esto en un caso muy simple:

CLLocation *test1 = [[CLLocation alloc] initWithLatitude:37.529530 longitude:-122.259232]; 
CLLocation *test2 = [[CLLocation alloc] initWithLatitude:47.900002 longitude:-103.495102]; 
NSLog(@"%f vs %f",[test2 distanceFromLocation:test1],[test1 distanceFromLocation:test2]); 
[test1 release]; 
[test2 release]; 

La salida a esta era 1907269.942754 vs 1,908,105.959114, una diferencia de casi 900 metros.

Aunque 900 metros pueden ser un pequeño porcentaje, estoy tratando de determinar si el usuario está más cerca de algo que una anotación y 900 metros pueden cambiar eso.

Mi pregunta es, ¿cuál de estos valores, si corresponde, es correcto? Además, si la ubicación contra la que pruebo es importante, ¿debo probar siempre en la misma ubicación (por ejemplo, usuario a destino y anotación al destino en lugar de destino al usuario y anotación al destino)?

Disculpe que la muestra está un poco fuera de contexto, ya que mi proyecto es bastante grande y esto ilustra mi problema. Cualquier ayuda sería apreciada ya que esto me ha causado bastante confusión y frustración.

Respuesta

1

El error que está observando es de 1 parte en 2000. Es de suponer que el algoritmo utilizado en este método está optimizado para la velocidad, por lo que la clasificación de la distancia es rápida, en lugar de exacta al milímetro.

Si necesita resultados precisos, no use estos métodos, pero encuentre otra forma. Si necesita resultados reproducibles, ordene los argumentos de una manera definida, p. siempre comience con la latitud más baja.

Cuestiones relacionadas