2011-04-05 3 views
5

Это мой первый вопрос, который вы задаете здесь, но я нашел много помощи от вопросов других людей.Заказ объектов CLLocation в -distanceFromLocation:

Мой вопрос относится к функции -distanceFromLocation: в CLLocation. Я предположил, что найти расстояние между точкой А и точкой В будет такой же, как между точкой В и точкой А, но я обнаружил, что это не так. Я испытал это в очень простом случае:

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]; 

Выход на это был +1907269,942754 против +1908105,959114, разница почти в 900 метров.

Хотя 900 метров может быть небольшим процентом, я пытаюсь определить, находится ли пользователь ближе к чему-то, чем аннотация, и 900 метров могут это изменить.

Вопрос в том, какое из этих значений, если оно есть, является правильным? Также, если важно, какое место я тестирую, нужно ли всегда тестировать одно и то же местоположение (например, пользователь для адресата и аннотация для адресата, а не адресата для пользователя и аннотации к месту назначения)?

Извините, что образец немного не соответствует контексту, так как мой проект довольно большой, и это иллюстрирует мою проблему. Любая помощь была бы оценена, так как это вызвало у меня довольно путаницу и разочарование.

ответ

1

Ошибка, которую вы наблюдаете, составляет 1 часть в 2000 году. Предположительно, алгоритм, используемый в этом методе, оптимизирован для скорости, поэтому сортировка списка местоположений на расстоянии выполняется быстро, а не точно до миллиметра.

Если вам нужны точные результаты, не используйте эти методы, а найдите другой способ. Если вам нужны воспроизводимые результаты, упорядочите аргументы определенным образом, например. всегда начинайте с более низкой широты.

Смежные вопросы