2

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

4

2 回答 2

2

还不是管理员,但您可能想查看具有集群功能的Android 地图扩展程序。

编辑:

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

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

或者

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

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

仅当您达到某个缩放级别时才显示标记尚未完全实现,但已在此处请求。

于 2013-04-14T12:56:09.513 回答
1

我意识到这个问题已经很老了,但如果有人仍然有同样的问题,可以使用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);
    }
}

有关更多信息,您可以查看此处图书馆的 Github 页面

于 2016-03-07T23:47:54.273 回答