Я пытаюсь найти способ управлять маркерами, которые у меня есть в реализации андроидной карты (v2) в моем приложении. Я хотел бы рисовать маркеры, которые находятся внутри видимой границы, и в то же время показывать только маркеры выше определенного уровня масштабирования. Это похоже на общую проблему. Итак, я спрашиваю, кто-нибудь здесь использует что-то вроде библиотеки менеджера маркеров или что-то в этом роде. Просто, чтобы сделать вещи проще и что мне не нужно делать это с нуля. Благодарю.Есть ли там менеджер маркеров Android Google Maps v2?
2
A
ответ
2
Еще не менеджер, но вы можете проверить Android Maps Extensions, который имеет функциональность кластеризации.
Edit:
В AME, чертежные маркеры внутри видимой области может быть достигнута с помощью:
map.setClustering(new ClusteringSettings().addMarkersDynamically(true));
или
map.setClustering(new ClusteringSettings().enabled(false).addMarkersDynamically(true));
, если вы не хотите, кластеризацию, но только оптимизируйте для случая при добавлении многих маркеров.
Показаны маркеры, только если вы достигли определенного уровня масштабирования, еще не полностью реализованы, но уже запрошены here.
1
Я понимаю, что этот вопрос довольно старый, но если у кого-то есть такая же проблема, можно использовать Google Maps Android Marker Clustering Utility.
шаги, которые должны быть приняты, перечислены ниже:
- Реализовать ClusterItem представлять маркер на карте. Элемент кластера возвращает позицию маркера в качестве объекта LatLng.
- Добавить новый ClusterManager для группировки элементов кластера (маркеров) на основе уровня масштабирования.
- Установите OnCameraChangeListener() в ClusterManager, поскольку ClusterManager реализует прослушиватель.
- Если вы хотите добавить определенную функциональность в ответ на событие щелчка маркера, установите OnMarkerClickListener() в MapManager, так как 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);
}
}
Для получения дополнительной информации вы можете проверить here и library's Github page