Читайте о широте и долготе расчетов.Широта и долгота - это сами расстояния, выраженные в виде дуг на сферической поверхности.Если у вас есть база данных местоположений, выраженная широтой и долготой, вы можете выполнить выборку, чтобы найти только те записи, которые находятся в пределах нескольких градусов широты к северу и югу и нескольких градусов долготы к востоку и западу от текущего местоположения пользователя.
Таким образом, вы получите предикат, который будет выглядеть примерно так (псевдо-код):
latitude >= (currentLatitude-aFewMinutesOfArc)
AND
latitude <= (currentLatitude+aFewMinutesOfArc)
AND
longitude >= (currentLongitude-aFewMinutesOfArc)
AND
longitude >= (currentLongitude+aFewMinutesOfArc)
... это создаст логическое поле, которое будет возвращать все записи ресторана, которые попали вкоробка.Тогда, если вам нужно рассчитать точные расстояния, вам нужно будет выполнить расчет только для нескольких записей из 7000, которые у вас есть.
Я бы порекомендовал прочитать о Location Services , поскольку он предоставляет множество инструментов для обработки вычислений местоположения.
Относительно того, использовать ли простой SQL или базовые данные, прочитайте этот предыдущий ответ по этому вопросу. Вкратце, если вы уже знаете API C SQL, и ваши данные просты, большиеи статический, тогда SQL - хороший выбор.Если вы можете потратить время на изучение Базовых данных, а ваши данные сложны и динамичны, то Базовые Данные - лучший выбор, независимо от размера данных.