2010-11-11 5 views
3

У меня есть массив с приблизительно 1000 объектами, каждый из которых имеет точное значение координаты. То, что я хотел бы сделать, это взять кнопку «Поиск», которую у меня есть, и, при нажатии, определить текущее местоположение и рассчитать 10 ближайших объектов в этом месте. Какие-нибудь советы по лучшему пути? Благодарю.iPhone MKMapView: обнаружение ближайших местоположений в массиве с текущего местоположения

ответ

10

Эта формула работает только для плоских поверхностей, где сетки в каждом направлении одинаковы. Это справедливо в небольших масштабах на экваторе, но чем дальше от экватора, тем ближе линии долготы добираются друг к другу, в то время как широтные линии все еще находятся на одном и том же расстоянии друг от друга.

Например, из Окленда одна градус широты составляет ~ 111,2 км, а одна из долгот - 88,8 км. Таким образом, сетка не квадратная. Эффективно означает, что из (0,0) оно далее (0,1), чем (1,0).

Правильное решение - использовать CLLocation от Apple и его getDistanceFrom: (или distanceFromLocation:), который вычисляет истинные расстояния, основанные на поверхности сферы (с учетом прогноза WGS84, я думаю).

1

Mark,

Да, это довольно просто. Все, что вам нужно сделать, - это провести цикл по массиву и рассчитать расстояние между каждым и вашим текущим местоположением. Затем вы можете сохранить десять записей с самым низким расстоянием.

Расстояние формула просто:

((x1 - x2)^2 + (y1 - y2)^2)^(1/2) 

Так что я бы иметь NSMutableArray как я петельные, а затем сделать алгоритм типа пуш-поп вернуть низкий 10.

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

+2

Помните, что если вы заинтересованы только в сравнении расстояний (не фактических значений расстояния), вам не нужно делать квадратный корень, просто сравните значение distSquared – tato

+1

tato, хороший крик, не произошло меня - я слишком занят, срывая математику средней школы :) – makdad

+0

Хотя этот ответ отмечен как принятый, это неверно, потому что мир не плоский, а lat/long не является квадратной сеткой. Прокрутите вниз для ответа, который использует API Apple, чтобы получить правильное расстояние между точками. – Craig

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