Сортировать ближайшие местоположения, используя координаты?

У меня есть список мест с координатами
Если пользователи выбирают конкретное местоположение, я хочу предложить список мест поблизости, используя координаты, я могу добиться этого, поместив цикл и выполнив поиск всех мест на расстоянии от следующего кода

  for(i=0;i<locations.count;i++)
 CLLocation *locA = [[CLLocation alloc] initWithLatitude:lat1 longitude:long1];

 CLLocation *locB = [[CLLocation alloc] initWithLatitude:lat2 longitude:long2];

 CLLocationDistance distance = [locA distanceFromLocation:locB];
// if(distance<10)
 //{
 //show the pin
// }

Но я думаю, это неэффективный способ, если у нас есть больше мест в базе данных. Что я могу сделать здесь

Есть ли альтернативный способ?

1 ответ

Решение

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

Теперь ваша логика цикла вопросов вступает в игру. Подход хорош, хотя использование вашего собственного цикла, вероятно, не лучше. Вместо этого посмотрите на использование sortedArrayUsingComparator: или же sortedArrayUsingFunction:context:,

Другие вопросы по тегам