Найти координаты, ближайшие к моему текущему местоположению GPS - PullRequest
1 голос
/ 18 февраля 2012

У меня в приложении для iPhone в виде плоского файла около 800 географических координат.Я ищу эффективный способ найти алгоритм, который будет принимать текущее местоположение пользователя, проходить через все эти 800 координат и извлекать только те координаты, которые находятся в 10 милях.Насколько эффективно это можно сделать?Также, пожалуйста, поделитесь ссылками, которые помогут мне понять основы математики.

Ответы [ 2 ]

4 голосов
/ 18 февраля 2012

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

ЗдесьКак создать местоположение:

CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];

А вот как найти расстояние между двумя местоположениями:

CLLocationDistance distance = [locationA distanceFromLocation:locationB]; //CLLocationDistance is a double

Однако вам не нужно сортировать местоположения.Просто прокрутите их и добавьте ближайшие массивы в массив.

2 голосов
/ 18 февраля 2012

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

Нахождение ближайшей точки к данной точке

Есливремя поиска является проблемой (итерируя по 800 упомянутым вами точкам данных), тогда как насчет двумерного хеша ?Просто загрузите набор данных в сегменты или регионы на основе широты / долготы - тогда вам не придется искать весь набор данных - только возможные сегменты, которые могут содержать совпадения.

Хорошая хеш-функция для двумерного индекса

...