Сортировать ближайшие местоположения, используя координаты?
У меня есть список мест с координатами
Если пользователи выбирают конкретное местоположение, я хочу предложить список мест поблизости, используя координаты, я могу добиться этого, поместив цикл и выполнив поиск всех мест на расстоянии от следующего кода
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:
,