Google Maps Androidv2APIからGoogleMapに異なるマーカーを配置する必要があります。問題は、複数のマーカーが同じ位置(lat / lng)に設定されているため、ユーザーには「最新の」マーカーしか表示されないことです。
(ズームレベルに関連して)同じ領域から異なるマーカーをクラスター化する可能性(最良の場合:ライブラリ)はありますか?
MarkerClustererについてはすでに読みましたが、これはJavaScriptAPI用に設計されています。
Google Maps Androidv2APIからGoogleMapに異なるマーカーを配置する必要があります。問題は、複数のマーカーが同じ位置(lat / lng)に設定されているため、ユーザーには「最新の」マーカーしか表示されないことです。
(ズームレベルに関連して)同じ領域から異なるマーカーをクラスター化する可能性(最良の場合:ライブラリ)はありますか?
MarkerClustererについてはすでに読みましたが、これはJavaScriptAPI用に設計されています。
Google は、Google マップ Android API ユーティリティ ライブラリの一部として、これを行うためのユーティリティを提供しています。
https://developers.google.com/maps/documentation/android/utility/marker-clustering
ソースは次のとおりです。
私はまだこれを試す機会がありませんでしたが、それは非常に有望に見えます:
http://code.google.com/p/android-maps-extensions/
この投稿から
これは、かなりかっこいいクラスターアニメーションを備えた別のライブラリです。
少し遅れましたが、Clusterkraf は素晴らしいライブラリです。チェックしてみてください。
次の手順に従う必要があります。
Android スタジオ / Gradle:
dependencies {
compile 'com.google.maps.android:android-maps-utils:0.3+'
}
シンプルなマーカー クラスタラーを追加する
以下の手順に従って、10 個のマーカーの単純なクラスターを作成します。結果は次のようになりますが、表示/クラスター化されるマーカーの数はズーム レベルによって異なります。
必要な手順の概要は次のとおりです。
ClusterItem
マップ上のマーカーを表すために実装します。クラスター アイテムは、マーカーの位置を LatLng オブジェクトとして返します。ClusterManager
ズーム レベルに基づいてクラスター アイテム (マーカー) をグループ化するために、新しい を追加します。OnCameraChangeListener()
を に設定します。ClusterManager
ClusterManager
OnMarkerClickListener()
をに設定します。ClusterManager
ClusterManager
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 にアクセスしてください。
さらに質問がある場合は、私に連絡してください。
Clusterkrafで問題を抱えている人(私はそれを機能させることができません!) や、Android-maps-extensionが Play サービス ライブラリのカスタム ビルドに同梱されているために使用できない人のために、この他のライブラリを提案したいと思います。小さく、よく書かれており、箱から出してすぐに動作します:
残りの 2 つのライブラリを試して 1 日中過ごした後、これで 1 日が救われました。
Google マップ Android API ユーティリティ ライブラリのパフォーマンスに問題がある方のために、独自の高速クラスタリング ライブラリを作成しました: https://github.com/sharewire/google-maps-clustering。地図上の 20000 個のマーカーを簡単に処理できます。