iOS SDK - Отображение # самых важных POI в любом отображаемом диапазоне карт - PullRequest
0 голосов
/ 17 апреля 2011

У меня есть структура данных, содержащая среди прочего:

  • и NSNumber, показывающие важность POI (точки интереса)
  • a CLLocation, содержащий координаты POI.

Предположим, я могу упорядочить POI по важности, и каждый POI имеет уникальный фактор важности, каков наилучший способ получить подмассив с POI, которые находятся внутри отображаемой области в моем MKMapView?

Простая проверка каждого POI кажется неэффективной, поскольку у меня может быть пара тысяч POI, и я хочу повторять этот процесс каждый раз при изменении уровня масштабирования (поэтому в любом отображаемом регионе я показываю только # наиболее важные из них).

1 Ответ

0 голосов
/ 17 апреля 2011

Я предполагаю, что вы ищете:

- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect

Цитирование Документация Apple :

Этот метод предлагает быстрый способ полученияаннотации объектов в определенной части карты.Этот метод намного быстрее, чем сам линейный поиск объектов в свойстве аннотаций.

Позаботьтесь, что это только Доступно в iOS 4.2 и более поздних версиях , я боюсьв предыдущих версиях iOS нет другого решения, кроме пользовательского кода.

РЕДАКТИРОВАТЬ О вашем комментарии: Я предполагаю, что для нескольких тысяч комментариев вышеупомянутый метод должен сделайте свое дело, MKAnnotation - это легкий протокол, сканирование массива путем фильтрации по координатам должно быть в порядке.Но будьте осторожны, не добавляя тысячи MKAnnotationView, которые работают на iPhone 4, уже сделали это, но вы почти не можете прокрутить карту:)

Тогда я бы предложил:

  1. Используйте этот метод: быстро кодировать, легко, затем выполнить некоторые тесты производительности, на устройстве
  2. Если производительности недостаточно ... или вам нужно поддерживать предыдущие версии iOS,никакой магии, напишите свой собственный код.(не должно быть так сложно, есть служебные методы для преобразования регионов и тому подобное)

Что касается памяти, эй, эти устройства легко имеют как минимум 64 МБ свободной памяти для вашего приложения и убьют некоторые процессыесли нет, не пугайтесь нескольких K аннотаций!Просто позаботьтесь об утечках памяти, особенно при таких интенсивных процессах.

...