Консолидируйте аннотации на масштабируемый MKMapView

Существует много плохих способов пойти о том, что я хочу сделать, но это походит на один из тех случаев "должен быть лучший путь".

Я использую MKMapView в приложении для iPhone, которое отображает много аннотаций. Притворитесь для концептуального обсуждения, что каждый город в штате США имеет аннотацию, таким образом, существует довольно плотная груда аннотаций на экране. Поскольку пользователь уменьшает карту, те аннотации начинают уплотнять в друг на друге, пока они не накладываются и становятся твердыми выбрать индивидуально.

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

Я мог назвать CGRectIntersectsRect на представлениях аннотации, но использование, которое, будет казаться, будет проблемой N^2 - я должен был бы выполнить итерации по каждой аннотации для каждой аннотации. Рассмотрите этот псевдокод:

FOR firstAnnotationView IN allAnnotationViews
   FOR secondAnnotationView in allAnnotationViews
       IF CGRectIntersectsRect(firstAnnotationView.frame, secondAnnotationView.frame)
           // found two overlapping annotations, consolidate them
       ENDIF
   ENDFOR
ENDFOR

Вы видите, почему это было бы медленно, и это должно будет работать каждый раз, когда карта была увеличена или!

Таким образом, как Вы все обнаружили бы перекрывающиеся аннотации в карте, и опытным производительностью способом, консолидируйте их разумно?

15
задан Jackson 19 October 2009 в 17:02
поделиться