Android Google Map Utils - 过滤群集

时间:2014-03-20 19:30:33

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

我有一个应用程序,我正在处理我在地图上绘制各种兴趣点的地方。有5种不同类型的POI,我添加了按类型过滤的功能。我能够正确地实现标记的聚类,并且我还按类型实现了对各个标记的过滤而没有任何问题,但是我无法弄清楚如何按类型过滤包含在Cluster中的标记,然后让实用程序重新绘制它的簇。

为了按类型过滤标记,我创建了自己的CustomClusterRenderer并覆盖了onClusterItemRendered:

@Override
protected void onClusterItemRendered(AbstractPOI clusterItem, Marker marker) {
    // TODO Auto-generated method stub
    super.onClusterItemRendered(clusterItem, marker);

    if (mClusterManager.getMarkerMap().get(clusterItem.getPosition()) == null) {
        /*
         * Save a reference to the appropriate filter array by type. 
         */
        if (MapUtils.TYPE_HOTEL.equals(marker.getSnippet())) {
            mClusterManager.getHotelMarkers().add(marker);
        } else if (MapUtils.TYPE_PARK.equals(marker.getSnippet())) {
            mClusterManager.getParkMarkers().add(marker);
        } else if (MapUtils.TYPE_PROVIDER.equals(marker.getSnippet())) {
            mClusterManager.getProviderMarkers().add(marker);
        } else if (MapUtils.TYPE_RESTAURANT.equals(marker.getSnippet())) {
            mClusterManager.getRestaurantMarkers().add(marker);
        }

        /*
         * Save this marker to our marker map to prevent duplicates. 
         */
        mClusterManager.getMarkerMap().put(clusterItem.getPosition(), marker);
    }
}

如果某种方式它也意味着标记不包含在缩放期间创建的簇中,这可能最终会出现问题。我不确定。上面的方法保留了对标记的引用,以便在我的CustomClusterManager中,我可以包含用于循环这些标记并设置其“可见”属性的函数:

public void toggleHotelFilter(boolean visible) {
    for (Marker marker : mHotelMarkers) {
        marker.setVisible(visible);
    }
    cluster();
}

可能有更好的方法可以做到这一点,但到目前为止,它似乎确实有效。接下来的部分是让过滤器也进入Clusters并抽出正在过滤的POI,并更新计数(或根据不可见的数量完全删除集群)。

我使用的是google-maps-utils库

0 个答案:

没有答案