【问题标题】:Is there a Android Google Maps v2 Marker Manager out there?那里有 Android Google Maps v2 Marker Manager 吗?
【发布时间】:2013-04-14 00:50:08
【问题描述】:

我正在尝试找到一种方法来管理我在我的应用程序中的 android 地图 (v2) 实现中拥有的标记。我希望能够绘制可视边界内的标记,同时仅显示高于某个缩放级别的标记。这似乎是一个普遍的问题。所以,我问这里是否有人使用标记管理器库之类的东西。只是为了让事情变得更容易,而且我不必从头开始制作。谢谢。

【问题讨论】:

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


    【解决方案1】:

    还不是经理,但您可能想查看Android Maps Extensions,它具有集群功能。

    编辑:

    在 AME 中,可以通过以下方式在可见区域内绘制标记:

    map.setClustering(new ClusteringSettings().addMarkersDynamically(true));
    

    或

    map.setClustering(new ClusteringSettings().enabled(false).addMarkersDynamically(true));
    

    如果您不想聚类,而只在添加许多标记时针对大小写进行优化。

    仅在达到特定缩放级别时显示标记尚未完全实现,但已请求 here。

    【讨论】:

      【解决方案2】:

      我知道这个问题已经很老了,但是如果有人仍然有同样的问题,可以使用Google Maps Android Marker Clustering Utility。
      应采取的步骤如下:

      1. 实现 ClusterItem 以表示地图上的标记。集群项将标记的位置作为 LatLng 对象返回。
      2. 添加新的 ClusterManager 以根据缩放级别对集群项(标记)进行分组。
      3. 将地图的 OnCameraChangeListener() 设置为 ClusterManager,因为 ClusterManager 实现了监听器。
      4. 如果要添加特定功能以响应标记单击事件,请将地图的 OnMarkerClickListener() 设置为 ClusterManager,因为 ClusterManager 实现了侦听器。
      5. 将标记输入 ClusterManager。

      示例实现:

      public class MyItem implements ClusterItem {
         private final LatLng mPosition;
      
         public MyItem(double lat, double lng) {
             mPosition = new LatLng(lat, lng);
         }
      
         @Override
         public LatLng getPosition() {
             return mPosition;
         }
      }
      
      
      private void setUpClusterer() {
          // Declare a variable for the cluster manager.
          private ClusterManager<MyItem> mClusterManager;
      
          // Position the map.
          getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));
      
          // Initialize the manager with the context and the map.
          // (Activity extends context, so we can pass 'this' in the constructor.)
          mClusterManager = new ClusterManager<MyItem>(this, getMap());
      
          // Point the map's listeners at the listeners implemented by the cluster
          // manager.
          getMap().setOnCameraChangeListener(mClusterManager);
          getMap().setOnMarkerClickListener(mClusterManager);
      
          // Add cluster items (markers) to the cluster manager.
          addItems();
          }
      
      private void addItems() {
      
          // Set some lat/lng coordinates to start with.
          double lat = 51.5145160;
          double lng = -0.1270060;
      
          // Add ten cluster items in close proximity, for purposes of this example.
          for (int i = 0; i < 10; i++) {
              double offset = i / 60d;
              lat = lat + offset;
              lng = lng + offset;
              MyItem offsetItem = new MyItem(lat, lng);
              mClusterManager.addItem(offsetItem);
          }
      }
      

      更多信息您可以查看here和library's Github page

      【讨论】:

        猜你喜欢
        • 2013-01-24
        • 1970-01-01
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-24
        相关资源
        最近更新 更多