iOS MapKit показывает ближайшие аннотации на определенном расстоянии

В настоящее время я работаю над приложением для iPhone / iPad. У меня есть несколько аннотаций в моем MapKit, я хочу отслеживать местоположение пользователя и отображать аннотации, которые находятся в пределах 3 км. Может ли кто-нибудь дать мне старт?

 Conrad Shultz09 июн. 2012 г., 00:44
С какой частью у тебя проблемы? Место отслеживания? Нахождение точек в радиусе? Отображение аннотаций?
 BigAppleBump09 июн. 2012 г., 19:51
Отображение аннотаций из базы данных и отображение точек в радиусе. Пожалуйста, предложите мне несколько хороших уроков, если таковые имеются.

Ответы на вопрос(1)

Решение Вопроса

.

Я предполагаю, что у вас есть метод, который возвращает набор из NSValue-wrappedCLLocationCoordinate2D структуры (основной подход один и тот же, независимо от того, каковы ваши внутренние представления данных). Затем вы можете отфильтровать список, используя метод, похожий на следующий (предупреждение: напечатано в браузере):

NSSet *locations = ...;
CLLocation centerLocation = ...; // Reference location for comparison, maybe from CLLocationManager
CLLocationDistance radius = 3000.; // Radius in meters
NSSet *nearbyLocations = [locations objectsPassingTest:^(id obj, BOOL *stop) {
        CLLocationCoordinate2D testCoordinate;
        [obj getValue:&testCoordinate];
        CLLocation *testLocation = [[CLLocation alloc] initWithLatitude:testCoordinate.latitude
                                                              longitude:testCoordinate.longitude];
        BOOL returnValue = ([centerLocation distanceFromLocation:testLocation] <= radius);
        [testLocation release];
        return returnValue;
    }
];

С отфильтрованным набором координат в руке вы можете создатьMKAnnotation экземпляры и добавить их на карту в обычном порядке, как описано вДокументация Apple.

Если у вас есть много тысяч тестовых мест, то я полагаю, что такой подход может вызвать проблемы с производительностью. Затем вы захотите переключить свой подход хранения точек, например,quadtrees, чтобы уменьшить количество точек, которые должны быть отфильтрованы по точности. Но не оптимизируйте преждевременно!

Надеюсь, это поможет!

 BigAppleBump08 июл. 2012 г., 05:01
Спасибо за ваш ответ . Я уже нашел трюк. :)

Ваш ответ на вопрос