我正在将该库用于我的一个项目(https://github.com/googlemaps/android-maps-utils)
这个库允许我在谷歌地图上创建群集,但我想知道是否可以按群组聚类。例如,我想只聚类那些" Friends"并聚集其他只有" Coworker"等等......(也许不是最好的例子,但我希望你理解)
我的想法是使用多个ClusterManager,但我没有尝试过,也不知道它是最好的解决方案还是一个好的解决方案。
答案 0 :(得分:1)
我找到了解决问题的方法。如果要创建多个组,更好的解决方案是管理多个Clustermanagers。
顺便说一下,答案的所有学分都归到了Github上的@Brody:
此处链接:https://github.com/googlemaps/android-maps-utils/issues/100#event-153755438
答案 1 :(得分:0)
使用多个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>());