поиск гео-радиуса iPhone;Использовать Core Data или SQLite? - PullRequest
5 голосов
/ 14 июля 2011

Я пишу заявление, которое имеет ок. 7000 европейских ресторанов в базе данных, и я хочу показать список ближайших к пользователю, например, все они находятся в радиусе 5 км от пользователя.

Я могу выполнить поиск на сервере, но для этого потребуется интернет. Можно ли сохранить данные на iPhone и запросить базу данных? Я не могу найти ссылки на что-то подобное в базовых данных или айфонах SQLite.

Нужно ли мне самому программировать его с помощью Пифагора и прочего и рассчитывать расстояние до каждого ресторана по каждому запросу? Или есть другой способ?

[обновить] Я хотел бы использовать его, как я уже на сервере (но для iPhone): SELECT * FROM restaurants WHERE ST_Distance_Sphere(geo, ST_GeomFromText(POINT(55.98767 57.12345), -1)) < 5000

Я хочу, чтобы пользователь мог найти ресторан, даже если у него нет подключения к Интернету, например, когда вы находитесь в другой стране.

Ответы [ 2 ]

9 голосов
/ 15 июля 2011

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

Таким образом, вы получите предикат, который будет выглядеть примерно так (псевдо-код):

latitude >= (currentLatitude-aFewMinutesOfArc)
AND
latitude <= (currentLatitude+aFewMinutesOfArc)
AND
longitude >= (currentLongitude-aFewMinutesOfArc)
AND
longitude >= (currentLongitude+aFewMinutesOfArc)

... это создаст логическое поле, которое будет возвращать все записи ресторана, которые попали вкоробка.Тогда, если вам нужно рассчитать точные расстояния, вам нужно будет выполнить расчет только для нескольких записей из 7000, которые у вас есть.

Я бы порекомендовал прочитать о Location Services , поскольку он предоставляет множество инструментов для обработки вычислений местоположения.

Относительно того, использовать ли простой SQL или базовые данные, прочитайте этот предыдущий ответ по этому вопросу. Вкратце, если вы уже знаете API C SQL, и ваши данные просты, большиеи статический, тогда SQL - хороший выбор.Если вы можете потратить время на изучение Базовых данных, а ваши данные сложны и динамичны, то Базовые Данные - лучший выбор, независимо от размера данных.

2 голосов
/ 27 августа 2014

Вы можете использовать GeoFire для iOS . Он использует Firebase для хранения данных, но поскольку Firebase поддерживает локальный кеш, он все равно будет работать без сетевого подключения. Он будет обрабатывать как GeoQueries, так и уведомлять вас в режиме реального времени, когда элементы входят и выходят из вашего запроса.

[отказ от ответственности: я работаю в Firebase]

...