Порядок объектов CLLocation в -distanceFromLocation: - PullRequest
5 голосов
/ 06 апреля 2011

Я впервые публикую здесь вопрос, но я нашел много помощи от вопросов других людей.

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

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 голос
/ 06 апреля 2011

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

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

...