【问题标题】:Android Google Map Utils Clustering DistanceAndroid Google Map Utils 聚类距离
【发布时间】: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,但没有成功。有什么想法吗??

【问题讨论】:

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


    【解决方案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 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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 1970-01-01
        • 2014-07-09
        • 2012-10-21
        相关资源
        最近更新 更多