Android 地图覆盖中的去冲突标记
我需要解决在地图上标记数千个项目的问题,这种方法准确、易读且快速,即使当用户缩小时,标记也会以令人困惑的方式重叠。这是一个AndroidAndroid 地图覆盖中的去冲突标记,android,android-mapview,google-maps-markers,hierarchical-clustering,Android,Android Mapview,Google Maps Markers,Hierarchical Clustering,我需要解决在地图上标记数千个项目的问题,这种方法准确、易读且快速,即使当用户缩小时,标记也会以令人困惑的方式重叠。这是一个AndroidMapView,但我的问题更一般 我知道,和各种启发式 这些算法似乎不准确,因为聚类标记与质心不对应。我的应用程序是安全关键的,而且标记相当大,所以近似值不够好 在我发明了一种算法之后,我知道它最初是在80年代使用的。其正确描述为伪代码,如下所示: -- Greedy hierarchical clustering given R the clearance r
MapView
,但我的问题更一般
我知道,和各种启发式
这些算法似乎不准确,因为聚类标记与质心不对应。我的应用程序是安全关键的,而且标记相当大,所以近似值不够好
在我发明了一种算法之后,我知道它最初是在80年代使用的。其正确描述为伪代码,如下所示:
-- 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;
——贪婪层次聚类
给定R标记的间隙半径
假设我们是一个集合,最初是单个集群,每个集群只包含一个标记
环
设为S中具有最近质心的一对簇,相距d;(1)
如果d>=2R,退出循环;
从S上拆下a和b;
在S中插入新的簇(a和b);
端环;
现在在每个簇的质心处绘制一个标记
我使用了一个可更新的Delaunay三角剖分和一个优先级队列来提高(1)的效率,但最近发现删除kd树也可以工作。DT算法的不对称复杂性与kd树(O(n logn)平均数)相同,但我猜想它在实践中会更快
问题是:
- 是否有更好的算法来查找集群?贪婪算法可以产生比严格按照最小数量分离标记所需的更少的聚类。找到最大的集合可能是NP困难的。有比贪婪更好的启发式方法吗
- 用kd树代替Delaunay三角剖分值得吗?DT在10000个节点上的性能在快速平板电脑上是微乎其微的:缩放后最多2秒
- 是否存在在簇质心处放置标记的现有包