アプリの Android マップ (v2) 実装にあるマーカーを管理する方法を見つけようとしています。表示可能な境界内にあるマーカーを描画できると同時に、特定のズーム レベルを超えるマーカーのみを表示できるようにしたいと考えています。よくある問題のようです。そこで、マーカー マネージャ ライブラリなどを使用している方はいらっしゃいますか。物事を簡単にするためであり、最初から作成する必要はありません。ありがとう。
質問する
2342 次
2 に答える
1
この質問はかなり古いことを認識していますが、まだ同じ問題がある場合は、Google Maps Android Marker Clustering Utilityを使用できます。
実行する必要がある手順を以下に示します。
- ClusterItem を実装して、マップ上のマーカーを表します。クラスター アイテムは、マーカーの位置を LatLng オブジェクトとして返します。
- 新しい ClusterManager を追加して、ズーム レベルに基づいてクラスター アイテム (マーカー) をグループ化します。
- ClusterManager はリスナーを実装するため、マップの OnCameraChangeListener() を ClusterManager に設定します。
- マーカー クリック イベントに応答して特定の機能を追加する場合は、マップの OnMarkerClickListener() を ClusterManager に設定します。これは、ClusterManager がリスナーを実装するためです。
- マーカーを 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 に答える