Вариант, который я предлагаю, если вы хотите остаться со списками, состоит в том, чтобы разбить большой список на меньшие, которые охватывают меньшие регионы.
Если разбиение их на 7 австралийских штатов дает необходимый вам уровень производительности, то это нормально. Но вместо этого я бы создал меньшие области (все прямоугольные), каждая из которых покрывала бы фиксированное число градусов N на стороне. N не должно быть слишком маленьким, но не слишком большим (это зависит от того, как далеко от текущего местоположения вы хотите показать данные).
Например, вы можете разбить один лист на 16 областей следующим образом (это не обязательно должно быть квадратное число):
North
A B C D
West E F G H East
I J K L
M N O P
South
Plist "A" будет содержать данные аннотации, скажем, для лат от 50 до 51 и от 100 до 110.
Plist "B" будет содержать данные аннотации для Lat 50 до 51 и Lon от 110 до 120.
Plist "E" будет содержать данные аннотации для лат 49 до 50 и от 100 до 110.
И т.д.
У меня также был бы дополнительный лист индекса, который позволил бы приложению выяснить, в каком листе находится данная координата и каковы соседи этого списка. Затем приложение может считывать данные аннотации из plist текущего местоположения и его соседей, если текущее местоположение находится вблизи границы региона.
Структура индексного списка может выглядеть следующим образом:
PlistName NWCoordinate SECoordinate Neighbors
A 51,100 50,110 B, E, F
F 50,110 49,120 A, B, C, E, G, I, J, K
Индексный список будет прочитан один раз в начале приложения.
Затем, как только приложение получит текущее местоположение (или когда оно достаточно существенно изменится), приложение сделает следующее:
- Удалить существующие аннотации с карты.
- Используйте индекс, чтобы выяснить, из каких списков нужно загрузить новые аннотации. Предположим, что текущее местоположение 49.25, 112.3. Используя индекс, приложение загружает F plist и его соседей в некоторый массив (не напрямую на карту по одному).
- Добавьте аннотации в массиве за один снимок, используя
addAnnotations
.