在我们的应用程序中,我们使用 google map APIs v1。我为标记编写了基于网格的聚类(总数高达数千)。一切正常 - 良好的性能等......唯一的问题是我根据当前查看的区域计算网格
private void createCluster2DArray() {
double cwidth = (cachedrightLongitude - cachedleftLongitude) / clustersXnum;
double cheight = (cachedtopLatitude - cachedbottomLatitude) / clustersYnum;
for (int i = 0; i < clustersXnum; i++) {
for (int j = 0; j < clustersYnum; j++) {
Cluster cluster;
if (clusters[i][j] == null) {
cluster = new Cluster();
clusters[i][j] = cluster;
} else {
cluster = clusters[i][j];
cluster.list.clear();
}
//calculate dimensions
cluster.left = cachedleftLongitude + i * cwidth;
cluster.right = cluster.left + cwidth;
cluster.bottom = cachedbottomLatitude + j * cheight;
cluster.top = cluster.bottom + cheight;
cluster.calculateCenter(mMapView);
}
}
}
cachedrightLongitude, cachedrightLongitude, cachedrightLongitude, cachedrightLongitude
是以度为单位的设备屏幕区域的边界。您可以看到,问题在于每次用户更改可见区域(更改缩放级别或只是滑动屏幕)时,群集边界都会发生变化。这导致集群重新计算和标记在它们上的重新分布。
我看到的唯一解决方案是为每个缩放级别创建某种与屏幕无关的静态集群贪婪(例如,在缩放级别 5 时,集群的大小将为 10 度,在级别 6 时为 2 度,所以只有边界集群将动态改变它们的大小和外部边界)。我对吗?
还有其他建议吗?