Как я могу сгруппировать MKAnnotations автоматически относительно уровня масштабирования?

если пользователь уменьшает масштаб на MKMapView, я хочу MKAnnotations, которые являются друг близко к другу автоматически сгруппированному в одну аннотацию "группы". если пользователь увеличивает масштаб назад, аннотация "группы" должна быть разделена снова к уникальным/исходным аннотациям.

яблоко уже делает это в iOS 4 Photos.app

существует ли общий, "предопределенный" способ сделать это?

14
задан manu 7 July 2010 в 12:29
поделиться

1 ответ

Это блестящая идея. Я работаю над похожим приложением, надеюсь, вы не против, если я реализую эту концепцию :).

Чтобы ответить на ваш вопрос в меру своих возможностей, нет, я не думаю, что есть предопределенный способ сделать это.

Лучший способ, который я могу придумать (после изучения приложения iOS4 photos), это использовать метод делегата mapView:regionDidChangeAnimated:. Каждый раз, когда пользователь прокручивает/зумирует изображение, будет вызываться этот метод.

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

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

Это будет сложно, если у вас сотни аннотаций, так как я не могу придумать хороший способ реализовать это без двойного цикла.

Что вы думаете?

4
ответ дан 1 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: