【发布时间】:2013-04-14 00:50:08
【问题描述】:
我正在尝试找到一种方法来管理我在我的应用程序中的 android 地图 (v2) 实现中拥有的标记。我希望能够绘制可视边界内的标记,同时仅显示高于某个缩放级别的标记。这似乎是一个普遍的问题。所以,我问这里是否有人使用标记管理器库之类的东西。只是为了让事情变得更容易,而且我不必从头开始制作。谢谢。
【问题讨论】:
标签: android google-maps-android-api-2 android-maps-v2
我正在尝试找到一种方法来管理我在我的应用程序中的 android 地图 (v2) 实现中拥有的标记。我希望能够绘制可视边界内的标记,同时仅显示高于某个缩放级别的标记。这似乎是一个普遍的问题。所以,我问这里是否有人使用标记管理器库之类的东西。只是为了让事情变得更容易,而且我不必从头开始制作。谢谢。
【问题讨论】:
标签: android google-maps-android-api-2 android-maps-v2
还不是经理,但您可能想查看Android Maps Extensions,它具有集群功能。
编辑:
在 AME 中,可以通过以下方式在可见区域内绘制标记:
map.setClustering(new ClusteringSettings().addMarkersDynamically(true));
或
map.setClustering(new ClusteringSettings().enabled(false).addMarkersDynamically(true));
如果您不想聚类,而只在添加许多标记时针对大小写进行优化。
仅在达到特定缩放级别时显示标记尚未完全实现,但已请求 here。
【讨论】:
我知道这个问题已经很老了,但是如果有人仍然有同样的问题,可以使用Google Maps Android Marker Clustering Utility。
应采取的步骤如下:
示例实现:
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);
}
}
更多信息您可以查看here和library's Github page
【讨论】: