2

アプリの Android マップ (v2) 実装にあるマーカーを管理する方法を見つけようとしています。表示可能な境界内にあるマーカーを描画できると同時に、特定のズーム レベルを超えるマーカーのみを表示できるようにしたいと考えています。よくある問題のようです。そこで、マーカー マネージャ ライブラリなどを使用している方はいらっしゃいますか。物事を簡単にするためであり、最初から作成する必要はありません。ありがとう。

4

2 に答える 2

1

この質問はかなり古いことを認識していますが、まだ同じ問題がある場合は、Google Maps Android Marker Clustering Utilityを使用できます。
実行する必要がある手順を以下に示します。

  1. ClusterItem を実装して、マップ上のマーカーを表します。クラスター アイテムは、マーカーの位置を LatLng オブジェクトとして返します。
  2. 新しい ClusterManager を追加して、ズーム レベルに基づいてクラスター アイテム (マーカー) をグループ化します。
  3. ClusterManager はリスナーを実装するため、マップの OnCameraChangeListener() を 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 に答える