将群集Google地图API分组

时间:2014-08-08 12:57:39

标签: android google-maps-markers google-maps-api-2

我正在将该库用于我的一个项目(https://github.com/googlemaps/android-maps-utils

这个库允许我在谷歌地图上创建群集,但我想知道是否可以按群组聚类。例如,我想只聚类那些" Friends"并聚集其他只有" Coworker"等等......(也许不是最好的例子,但我希望你理解)

我的想法是使用多个ClusterManager,但我没有尝试过,也不知道它是最好的解决方案还是一个好的解决方案。

2 个答案:

答案 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>());