CLLocation - добавить радиус 2км или 2000м к координате - PullRequest
0 голосов
/ 11 октября 2011

Как добавить радиус к CLLocation координате? Я хочу видеть, какие клиенты находятся рядом с определенной координатой.

Мне нужно добавить 2000 метров или 2 км к координате.

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Поскольку расстояние мало, вы можете использовать приближение равного расстояния.Это приближение быстрее, чем при использовании формулы Хаверсайна.Итак, чтобы получить расстояние от вашей контрольной точки (lat1 / lon1) до точки, которую вы тестируете (lat2 / lon2), используйте формулу ниже.Важное примечание: вам необходимо преобразовать все точки широты / долготы в радианы:

R = 6371  // radius of the earth in km
x = (lon2 - lon1) * cos( 0.5*(lat2+lat1) )
y = lat2 - lat1
d = R * sqrt( x*x + y*y )

Если d меньше 2, то ваша точка находится в пределах 2 км от вашей контрольной точки.

Чтобы эффективнопройти через ваши точки, заказать точки по долготе.Долготы, которые находятся на расстоянии 2 градусов, будут больше, чем 2 км (если вы не находитесь около полюса), поэтому вам не нужно проходить через них.

1 голос
/ 11 октября 2011

Вы не можете "добавить радиус" к координате. Что вы можете сделать, если у вас есть CLLocation объекты (скажем, loc1 и loc2), это вычислить расстояние между ними:

CLLocationDistance dist = [loc1 distanceFromLocation:loc2];

и посмотрите, больше ли расстояние (в метрах) больше или меньше 2000.0.

Преобразование между координатными широтами / долготами (которые являются полярными координатами) и расстояниями является сложным, поэтому SDK предоставляет вам эту функцию.

...