iOS SDK - Отображение # наиболее важных POI в любом отображаемом диапазоне карт
У меня есть структура данных, содержащая среди прочего:
NSNumber
показывая важность POI (точки интереса)CLLocation
содержащий координаты POI.
Предположим, что я могу упорядочить POI по важности, и каждый POI имеет уникальный фактор важности, что является лучшим способом получить подмассив с POI, которые находятся внутри отображаемой области в моем MKMapView
?
Простая проверка каждого POI кажется неэффективной, поскольку у меня может быть пара тысяч POI, и я хочу повторять этот процесс каждый раз, когда изменяется уровень масштабирования (поэтому в любом отображаемом регионе я показываю только # наиболее важные из них).
1 ответ
Я думаю, что вы ищете это:
- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect
Цитирование документации Apple:
Этот метод предлагает быстрый способ извлечения объектов аннотаций в определенной части карты. Этот метод намного быстрее, чем выполнение линейного поиска объектов в свойстве аннотации самостоятельно.
Позаботьтесь о том, что это доступно только в iOS 4.2 и более поздних версиях, боюсь, в предыдущих версиях iOS нет другого решения, кроме пользовательского кода.
РЕДАКТИРОВАТЬ О вашем комментарии: я думаю, что для нескольких тысяч аннотаций, вышеупомянутый метод должен добиться цели, MKAnnotation
это легкий протокол, сканирование массива путем фильтрации по координатам должно быть в порядке. Но будьте осторожны, не добавляя тысячи MKAnnotationView
, который работает на iPhone 4, уже сделал это, но вы почти не можете прокрутить карту:)
Тогда я бы предложил:
- Используйте этот метод, быстро кодировать, легко, а затем сделать несколько тестов производительности на устройстве
- Если производительности недостаточно... или вы должны поддерживать предыдущие версии iOS, ничего страшного, напишите свой собственный код. (не должно быть так сложно, есть полезные методы для преобразования регионов и тому подобное)
Что касается памяти, эй, эти устройства легко имеют как минимум 64 МБ свободной памяти для вашего приложения, и в противном случае будут убивать некоторые процессы, не пугайтесь нескольких К аннотаций! Просто позаботьтесь о утечках памяти, особенно на таких интенсивных процессах.