2012-02-18 2 views
1

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

+1

Вы можете, вероятно, увидеть этот вопрос http://stackoverflow.com/questions/913576/finding-the-closest-point-to-a-given-point они обеспечивают простой пример, хотя это не написанный в Objective-C. –

+0

Я думаю, что у вас другая проблема, чем связанный вопрос, в том, что она пытается найти ближайшую сторону, и вы пытаетесь найти _all_ на определенном расстоянии, не так ли? – sarnold

ответ

4

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

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

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

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

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

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

2

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

Finding the closest point to a given point

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

Good hash function for a 2d index

+0

это именно то, что я искал. – dreampowder

+0

Если у меня 10 баллов на карте. И я хочу найти ближайшую точку к заданной точке «цели». И я вытащил свой линейку и вычислил расстояние от «цели» до каждой точки. Разве я не найду ближайшую точку? Зачем мне хаверин? – dimitris93

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