【问题标题】:Grouping cluster Google map API分组集群 Google 地图 API
【发布时间】:2014-10-01 23:14:22
【问题描述】:
【问题讨论】:
标签:
android
google-maps-markers
google-maps-api-2
【解决方案2】:
使用多个ClusterManager 很麻烦。我认为将多个 Algorithm 与包装器一起使用会更容易。
包装器应根据项目属性选择正确的算法。唯一的要求是所有项目都必须有一个共同的父类(在下面的示例中为Item)。
public class MultiAlgorithm<T extends ClusterItem> implements Algorithm<T> {
private final Algorithm<T> friendsAlgorithm;
private final Algorithm<T> coworkerAlgorithm;
public MultiAlgorithm() {
friendsAlgorithm = new NonHierarchicalDistanceBasedAlgorithm<>();
coworkerAlgorithm = new NonHierarchicalDistanceBasedAlgorithm<>();
}
private Algorithm<T> getAlgorithm(T item) {
// TODO Return the correct algorithm based on 'item' properties
}
@Override
public void addItem(T item) {
getAlgorithm(item).addItem(item);
}
@Override
public void addItems(Collection<T> collection) {
for (T item : collection) {
getAlgorithm(item).addItem(item);
}
}
@Override
public void clearItems() {
friendsAlgorithm.clearItems();
coworkerAlgorithm.clearItems();
}
@Override
public void removeItem(T item) {
getAlgorithm(item).removeItem(item);
}
@SuppressWarnings("unchecked")
@Override
public Set<? extends Cluster<T>> getClusters(double zoom) {
// Use a non-typed Set to prevent some generic issue on the result.addAll() method
Set result = new HashSet<>(friendsAlgorithm.getClusters(zoom));
result.addAll(coworkerAlgorithm.getClusters(zoom));
return result;
}
@Override
public Collection<T> getItems() {
Collection<T> result = new ArrayList<>(friendsAlgorithm.);
result.addAll(coworkerAlgorithm.getItems());
return result;
}
}
用法:clusterManager.setAlgorithm(new MultiAlgorithm<Item>());