Найти близлежащие места в данном регионе - PullRequest
1 голос
/ 20 марта 2012

У меня есть таблица в базе данных SQLite с 4000 местоположений, включая широту и долготу. На основании информации из региона, предоставленной MKCoordinateRegion class, как я могу получить места, которые расположены в этом регионе, с карты? Возможно ли это?

Сначала я попытался использовать Формула Хаверсайна , но я просто отсортировал места, расположенные ближе всего к центру карты. Но я хочу места, которые расположены в области карты. Или я не прав?

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 20 марта 2012

Вы можете получить максимальные / минимальные значения широты и долготы из вашего MKMapView, обратившись к атрибуту региона:

MKCoordinateRegion *mapRegion = myMap.region;

Затем вы можете получить доступ к максимальным и минимальным значениям следующим образом:

maxLatitude = mapRegion.center.latitude + mapRegion.span.latitudeDelta/2;
minLatitude = mapRegion.center.latitude - mapRegion.span.latitudeDelta/2;

maxLongitude = mapRegion.center.longitude+ mapRegion.span.longitudeDelta/2;
minLongitude = mapRegion.center.longitude- mapRegion.span.longitudeDelta/2;

Надеюсь, это поможет! Если вы храните свои данные в Core Data, NSSet или NSArray, вы можете использовать NSPredicate для фильтрации результатов, которые соответствуют вышеуказанным критериям.

Вот документация для вашего MKMapView и MKCoordinateRegion.

1 голос
/ 20 марта 2012

Вы пытаетесь найти все места в прямоугольной области?

Просто настройте свой запрос следующим образом:

find all locations where latitude > mapMinLat
                     and latitude < mapMaxLat
                     and longitude > mapMinLon
                     and longitude < mapMaxLon

где края вашей карты - mapMinLat, mapMaxLat, mapMinLon, mapMaxLon.

Если вы ищете многоугольную область, вам нужно использовать более продвинутый алгоритм.

0 голосов
/ 20 марта 2012

Я абсолютно не знаю, решит ли это вашу проблему, но SpatialLite - это сторонняя библиотека, которая сообщает:

SpatiaLite - это библиотека с открытым исходным кодом, предназначенная для расширенияЯдро SQLite для поддержки полноценных возможностей Spatial SQL.

Если посмотреть на список функций, то появится целый раздел с именем SQL functions that implement spatial operators

Ответы на собственный код sqlite были даны много разна SO, например Компиляция пользовательского SQLite для приложения iPhone

...