Как определить площадь MKMapRect с наибольшей концентрацией MKAnnotation объектов? - PullRequest
0 голосов
/ 24 января 2012

Учитывая MKMapView, который содержит переменное количество аннотаций ([mapView annotations]) в различных точках на карте и значение MKMapRect MKMapRectWorld, как я могу определить область на карте, которая имеет наибольшую концентрациюна MKAnnotation объектах (возможно, 5-15 аннотаций, ближайших друг к другу)?

Примеры сценариев:

* Поиск кофе : определить, в какой области карты больше всего Starbucks

* Статистика K9 : определить, в какой области карты больше всего кокер-спаниелей


«Площадь» может быть заданным размером прямоугольника или определяться блоком аннотаций, я полагаюне все равно.Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 24 января 2012

Вы найдете связанный вопрос полезным.

Также взгляните на K-means_algorithm

K-means_algorithm

Если у вас есть N аннотаций и вы хотите разбить на K частей, вы можете найти центр (который будет соответствовать определенным критериямНапример, свести к минимуму сумму квадратов внутри кластера каждой из K частей с помощью K-средних-алгоритма.Как только у вас будет центр, определите расстояние между центром и аннотацией, наиболее удаленной от центра, и вы получите радиус интересующего вас региона.Существует несколько вариантов алгоритма K-means_algorithm, который вы можете выбрать в зависимости от производительности и простоты реализации.

РЕДАКТИРОВАТЬ: Я не реализовал следующее, но думаю, что определенно даст одно из решений

Если вы в порядке с диапазоном 5-10, может быть несколько решений.Поэтому мы найдем одно из решений.

1- Скажем, у вас есть (N = 100) аннотации и вы хотите, чтобы (P = 15) из них были расположены наиболее плотно.

2- Затем мы разделим N аннотаций на K = N/ P групп (здесь K = 7) случайным образом

3- Используйте алгоритм K-средних, чтобы в итоге мы получили K групп, которые можно дифференцировать как отдельные объекты.

4- Эти K группыбудет обладать свойством минимума «внутрикластерной суммы квадратов».

5 - Если вы хотите сэкономить время вычислений, вы можете ослабить определение наиболее концентрированной группы как минимальной «суммы квадратов внутри кластера», в отличие от области, ограниченной ими.

6 - выберите группу из полученной группы K, которая удовлетворяет вашим критериям.

7- Если вы хотите сохранить определение минимальной площади (наибольшая концентрация), вам потребуется много вычислений

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

b.Рассчитаем каждый полигон и посмотрим, какой наименьший.не сложный, но требовательный к вычислениям)

EDIT2:

Я попробовал все, что мог, и наконец подумал, что этот вопрос принадлежит специалисту по математике.Я задал ваш вопрос здесь и из ответа вы можете получить документ, в котором обсуждается эта проблема и решение здесь .Задача, которую они обсуждают, - это N точек, найдите K точек, площадь которых выпуклая оболочка минимальна.

...