16

Google Maps Androidv2APIからGoogleMapに異なるマーカーを配置する必要があります。問題は、複数のマーカーが同じ位置(lat / lng)に設定されているため、ユーザーには「最新の」マーカーしか表示されないことです。

(ズームレベルに関連して)同じ領域から異なるマーカーをクラスター化する可能性(最良の場合:ライブラリ)はありますか?

MarkerClustererについてはすでに読みましたが、これはJavaScriptAPI用に設計されています。

4

8 に答える 8

24

Google は、Google マップ Android API ユーティリティ ライブラリの一部として、これを行うためのユーティリティを提供しています。

https://developers.google.com/maps/documentation/android/utility/marker-clustering

ソースは次のとおりです。

https://github.com/googlemaps/android-maps-utils

于 2014-02-02T00:48:31.193 に答える
20

私はまだこれを試す機会がありませんでしたが、それは非常に有望に見えます:

http://code.google.com/p/android-maps-extensions/

この投稿から

これは、かなりかっこいいクラスターアニメーションを備えた別のライブラリです。

https://github.com/twotoasters/clusterkraf

于 2013-03-19T20:43:56.433 に答える
7

少し遅れましたが、Clusterkraf は素晴らしいライブラリです。チェックしてみてください。

https://github.com/twotoasters/clusterkraf

于 2013-06-28T22:43:20.213 に答える
5

次の手順に従う必要があります。

  1. Google Maps Android API ユーティリティ ライブラリを実装/インストールする必要があります

Android スタジオ / Gradle:

dependencies {
    compile 'com.google.maps.android:android-maps-utils:0.3+'
}
  1. 次に、Google の公式ドキュメントを読む必要があります -> Google Maps Android Marker Clustering Utility

シンプルなマーカー クラスタラーを追加する

以下の手順に従って、10 個のマーカーの単純なクラスターを作成します。結果は次のようになりますが、表示/クラスター化されるマーカーの数はズーム レベルによって異なります。

シンプルなマーカー クラスタラーを追加する

必要な手順の概要は次のとおりです。

  1. ClusterItemマップ上のマーカーを表すために実装します。クラスター アイテムは、マーカーの位置を LatLng オブジェクトとして返します。
  2. ClusterManagerズーム レベルに基づいてクラスター アイテム (マーカー) をグループ化するために、新しい を追加します。
  3. はリスナーを実装するため、マップOnCameraChangeListener()を に設定します。ClusterManagerClusterManager
  4. マーカー クリック イベントに応答して特定の機能を追加する場合は、リスナを実装するため、マップOnMarkerClickListener()をに設定します。ClusterManagerClusterManager
  5. にマーカーを挿入しClusterManagerます。

手順をさらに詳しく見てみましょう: 10 個のマーカーからなる単純なクラスターを作成するには、まずMyItemを実装するクラスを作成しますClusterItem

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;
    }
}

マップ アクティビティで、 を追加しClusterManager、クラスター アイテムをフィードします。<MyItem>ClusterManager が type であることを宣言するtype 引数に注意してくださいMyItem

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);
    }
}

デモ

https://www.youtube.com/watch?v=5ZnVraO1mT4

ギットハブ

詳細情報や完成したプロジェクトが必要な場合は、https ://github.com/dimitardanailov/googlemapsclustermarkers にアクセスしてください。

さらに質問がある場合は、私に連絡してください。

于 2015-06-04T20:22:05.150 に答える
4

Clusterkrafで問題を抱えている人(私はそれを機能させることができません!) や、Android-maps-extensionが Play サービス ライブラリのカスタム ビルドに同梱されているために使用できない人のために、この他のライブラリを提案したいと思います。小さく、よく書かれており、箱から出してすぐに動作します:

クラスタラー: https://github.com/mrmans0n/clusterer

残りの 2 つのライブラリを試して 1 日中過ごした後、これで 1 日が救われました。

于 2013-10-31T14:50:11.940 に答える
0

Google マップ Android API ユーティリティ ライブラリのパフォーマンスに問題がある方のために、独自の高速クラスタリング ライブラリを作成しました: https://github.com/sharewire/google-maps-clustering。地図上の 20000 個のマーカーを簡単に処理できます。

于 2017-12-11T16:09:13.613 に答える