Подтвердить что ты не робот

Основные данные и основное местоположение

У меня есть база данных Core Data с широтой и долготой. Есть ли способ использовать метод Core Location getDistanceFrom:, чтобы найти пять ближайших местоположений для CLLocation, полученных из GPS? Нужно ли загружать все объекты с помощью Core Data и анализировать их, используя getDistanceFrom: для каждого из них или есть более простой способ?

4b9b3361

Ответ 1

Вам придется проходить через них по очереди; насколько я знаю, нет другого способа сделать это.

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

то есть. Что-то вроде

float latMax = wantedLat + 1;
float latMin = wantedLat - 1;
float lngMax = wantedLng + 1;
float lngMin = wantedLng - 1;
NSPredicate *predicate = [NSPredicate
    predicateWithFormat:@"lat > %f and lat < %f and lng > %f and lng < %f",
    latMin, latMax, lngMin, lngMax];

Хотя, в зависимости от того, сколько у вас данных и насколько близко оно расположено, вам нужно использовать другое число, чем 1!

Сэм

PS Кроме того, я не принял во внимание тот факт, что долгота обертывается!

Ответ 2

Вы не можете использовать CoreData для поиска ближайшего объекта, но можете сузить запрос с помощью ограничивающего блока. Чтобы найти ближайший объект, вы можете использовать просто разницу в lat/long, которая значительно быстрее, чем вычисление фактических расстояний.

У меня был аналогичный вопрос:

CoreData: Найдите минимальное значение рассчитанного свойства

Ответ 3

Следующий пример - это то, что вы ищете. Он использует функцию SQLite для вычисления расстояния в предложении ORDER BY (формула Хаверсина). Проблема заключается в том, что этот пример не использует Core-Data, а непосредственно API SQLite.

http://www.thismuchiknow.co.uk/?p=71