我正在尝试找到一种方法来管理我在我的应用程序中的 android 地图 (v2) 实现上拥有的标记。我希望能够绘制在可视边界内的标记,同时只显示高于某个缩放级别的标记。这似乎是一个普遍的问题。所以,我问这里是否有人使用标记管理器库之类的东西。只是为了让事情变得更容易,而且我不必从头开始制作。谢谢。
问问题
2342 次
2 回答
2
还不是管理员,但您可能想查看具有集群功能的Android 地图扩展程序。
编辑:
在 AME 中,可以通过以下方式在可见区域内绘制标记:
map.setClustering(new ClusteringSettings().addMarkersDynamically(true));
或者
map.setClustering(new ClusteringSettings().enabled(false).addMarkersDynamically(true));
如果您不想要聚类,但只在添加许多标记时针对大小写进行优化。
仅当您达到某个缩放级别时才显示标记尚未完全实现,但已在此处请求。
于 2013-04-14T12:56:09.513 回答
1
我意识到这个问题已经很老了,但如果有人仍然有同样的问题,可以使用Google Maps Android Marker Clustering Utility。
应采取的步骤如下:
- 实现 ClusterItem 以表示地图上的标记。集群项将标记的位置作为 LatLng 对象返回。
- 添加一个新的 ClusterManager 以根据缩放级别对集群项目(标记)进行分组。
- 将地图的 OnCameraChangeListener() 设置为 ClusterManager,因为 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 回答