Декомпрессионные маркеры в наложениях карт

69
7

Мне нужно решить проблему маркировки тысяч элементов на карте таким образом, чтобы она была точной и читаемой и быстрой, даже когда пользователь масштабируется, так что маркеры будут перекрываться путаными способами. Это Android MapView, но мои вопросы более общие.


Я знаю Fluster, сетчатые схемы, и различные эвристики.


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


После того как я изобрел алгоритм, я узнал, что он был впервые использован в 80-х. Его правильное описание "агломеративная иерархическая геометрическая центроидная кластеризация." Pseudcode выглядит следующим образом:


-- Greedy hierarchical clustering
given R the clearance radius of markers
let S be a set, initially singleton clusters containing exactly one marker each
loop
let <a,b> be the pair of clusters in S with closest centroids, distance d apart; (1)
if d >= 2R, exit the loop;
remove a and b from S;
insert new Cluster(a union b) into S;
end loop;

Теперь нарисуйте один маркер в центре тяжести каждого кластера.


Я использовал обновляемую триангуляцию Delaunay и приоритетную очередь, чтобы сделать (1) эффективным, но недавно обнаружил, что kd-деревья с удалением также будут работать. Алгоритм DT является такой же асимметричной сложностью, как kd-деревья (O (n log n)), но я предполагаю, что это будет быстрее на практике.


Вопросы:


    Есть ли лучшие алгоритмы для поиска кластеров? Жадный алгоритм может привести к меньшему количеству кластеров, чем это необходимо для разделения маркеров на минимальную сумму. Найти самый большой набор, вероятно, сложно. Существуют ли эвристики лучше, чем жадные?
    Стоит ли пытаться использовать kd-дерево вместо триангуляции Делоне? Производительность DT на 10000 узлов незначительна на быстром планшете: до 2 секунд после увеличения.
    Существуют ли существующие пакеты, которые помещают маркеры в центроиды кластера?

спросил(а) 2012-07-31T23:09:00+04:00 8 лет, 1 месяц назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема