2012-02-20 2 views
0

Я сохранил некоторую широту и долготу в базе данных SQLite, как показано на скриншоте.SQLite - выбор набора lat, длинный от таблицы

enter image description here

Имя базы данных: database

Имя таблицы: table

Поля в таблице Таблица:

* Name 

* Score 

Я занимаюсь разработкой приложений iPhone. В этом случае, если я дам latitude, longitude и range (расстояние) в качестве ввода, я должен получить набор latitudes & longitudes из базы данных для данного range. Например,

Если я даю входные параметры

Latitude -> 40.7000, Longitude -> -73.9500 and Range -> 30 miles, он должен проверить базу данных для Latitude & Longitude в данном range и возвращают result. Таким образом, result должен быть

40.752199, -73.996696 
40.793019, -73.969574 
40.750898, -73.86898 
40.675431, -73.954811 
40.68194, -73.927689 

Как я могу решить эту проблему в iPhone? Заранее спасибо.

ответ

1

То, что вы ищете, называется функцией Haversine. Эта страница имеет отличную функцию SQLite, которая работает хорошо и быстро.

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

Если один не работает для вас, искать гаверсинуса и вы найдете то, что делает.

Вам нужно добавить «WHERE distance < 30» на ваш SQL. Вам также может понадобиться настроить числа, используемые для получения миль вместо километров.

1

Я вижу два разных способа решить вашу задачу.

  1. Чтобы сделать довольно сложный запрос SQL, с некоторыми математическими. ВЫБЕРИТЕ ИЗ ГДЕ (x-center_x)^2 + (y-center_y)^2 < radius^2 (не прощайте, покажите вам радиус не в милях, но в граде.)

  2. читать все координаты из БД с широтой в rande r-30 миль < center_x < r + 30 миль. и чем уменьшить все согласования, которые не исправляются в ваших требованиях ... там вы можете использовать CoreLocation Framework. "[location1 getDistanceFrom: location2]"

Смежные вопросы