Android Google Map Utils群集距离

时间:2014-12-14 14:08:17

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

我使用Android Google Map utils来启用我的标记群集。我使用10 Markers

当我按下按钮时,我打电话给:

mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(getMarkerBoundingBox(), MAP_PADDING));

我的八个标记靠近给定区域,因此它们聚集在一起,我可以在中心看到一个数字为8的蓝色球。 其他两个标记远离另一组,但彼此非常接近。

我现在看到的是一个带有八个标记的群集,而远离一个标记。只有当我放大单个标记区域(实际上是两个标记)时,我才能看到两个标记。

我想展示八个标记的簇,但是要显示那两个标记的簇。

如何减少创建群集的距离?在极限情况下,如果标记太靠近,我希望在缩放级别最后创建一个群集。

我试图在MAX_DISTANCE_AT_ZOOM更改NonHierarchicalDistanceBasedAlgorithm.java,但没有成功。任何想法??

3 个答案:

答案 0 :(得分:10)

尝试覆盖shouldRenderAsCluster,因此群集仅从2个项目开始:

声明集群管理器时:

    mClusterManager.setRenderer(new CustomRenderer<YOUR_TYPE>(getActivity(), googleMap, mClusterManager));

class CustomRenderer<T extends ClusterItem> extends DefaultClusterRenderer<T> {
    public CustomRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager) {
        super(context, map, clusterManager);
    }

    @Override
    protected boolean shouldRenderAsCluster(Cluster<T> cluster) {
        //start clustering if at least 2 items overlap
        return cluster.getSize() > 1;
    }
 ...
}

答案 1 :(得分:0)

您还可以使用setMinClusterSize(1);

public MyIconRendered(Context context, GoogleMap map,
                      ClusterManager<AbstractMarker> clusterManager) {
    super(context, map, clusterManager);
    setMinClusterSize(1);
}

答案 2 :(得分:0)

使用Alexandr StukalovPavel Dudka的解决方案:

class CustomClusterRenderer<T : ClusterItem>(
    val context: Context,
    val map: GoogleMap,
    clusterManager: ClusterManager<T>
) : DefaultClusterRenderer<T>(context, map, clusterManager) {

    init {
        minClusterSize = 1
    }
}

用法:

private var clusterManager: ClusterManager<CustomClusterItem>? = null

override fun onMapReady(googleMap: GoogleMap) {
    this.googleMap = googleMap
    ...

    clusterManager = ClusterManager(context!!, googleMap)
    val clusterRenderer = CustomClusterRenderer(context!!, googleMap, clusterManager!!)
    clusterManager!!.renderer = clusterRenderer
}

data class CustomClusterItem(
    private val position: LatLng,
    private val title: String,
    private val snippet: String,
    val id: Int,
    val index: Int
) : ClusterItem {
    override fun getSnippet(): String = snippet

    override fun getTitle(): String = title

    override fun getPosition(): LatLng = position
}