Android Google Map Utils 聚类距离

Posted

技术标签:

【中文标题】Android Google Map Utils 聚类距离【英文标题】:Android Google Map Utils Clustering Distance 【发布时间】:2018-03-07 13:50:58 【问题描述】:

我正在使用 android Google Map 实用程序来启用我的标记集群。我正在使用 10 Markers

当我按下一个按钮时,我会调用:

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

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

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

我想显示八个标记的群集,但显示两个标记的群集。

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

我尝试将MAX_DISTANCE_AT_ZOOM 更改为NonHierarchicalDistanceBasedAlgorithm.java,但没有成功。有什么想法吗??

【问题讨论】:

【参考方案1】:

尝试覆盖 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;
    
 ...

【讨论】:

我认为,@AlexandrStukalov 在下面 (minClusterSize = 1) 给出了更可取的方式。【参考方案2】:

你也可以使用 setMinClusterSize(1);

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

【讨论】:

【参考方案3】:

使用Alexandr Stukalov或Pavel 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

【讨论】:

以上是关于Android Google Map Utils 聚类距离的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio第二十四期 - Gson封装Utils

我可以从一个外部库导入和编辑代码吗? (例如 google-maps-utils)

无法再编译 android maps utils

打开eclipse后应该怎样安装 Google map API ?在Android sDK Manager列表中没有找到Google map API 这应该

如何在 android 上使用 google map api 获取 google 驾驶指令?

无法解决:com.google.android.support.gms:play-services-map:10.2.0