В новом API Карт Google для Android мы можем добавить маркер , но нет способа (легко) удалить его.
Мое решение - оставить маркеры на карте и перерисовать карту, когда я хочу удалить маркер, но это не очень эффективно.
private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();
private void add(String name, LatLng ll) {
final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
mMarkers.put(name, marker);
runOnUiThread(new Runnable() {
@Override
public void run() {
mMap.addMarker(marker);
}
});
}
private void remove(String name) {
mMarkers.remove(name);
runOnUiThread(new Runnable() {
@Override
public void run() {
mMap.clear();
for (MarkerOptions item : mMarkers.values()) {
mMap.addMarker(item);
}
}
});
}
Есть ли у кого-нибудь идеи получше?
android
google-maps
Jonas
источник
источник
Ответы:
Сигнатура метода для
addMarker
:Поэтому, когда вы добавляете маркер к
GoogleMap
, указав параметры для маркера, вы должны сохранитьMarker
возвращаемый объект (вместоMarkerOptions
объекта, который вы использовали для его создания). Этот объект позволяет вам позже изменить состояние маркера. Когда вы закончите с маркером, вы можете позвонить,Marker.remove()
чтобы удалить его с карты.Кстати, если вы хотите только временно скрыть его, вы можете переключить видимость маркера, позвонив
Marker.setVisible(boolean)
.источник
Добавьте маркер на карту вот так
Затем вы сможете использовать метод удаления, он удалит только этот маркер
источник
очистить все каракули на карте используйте
источник
если маркер существует, удалите последний маркер. если маркер не существует, создать текущий маркер
источник
Если вы используете язык Kotlin, просто добавьте этот код:
Создание глобальных переменных
GoogleMap
иMarker
типов.Я использую маркер переменной, чтобы значение маркера переменной могло изменяться напрямую
И я использую эту функцию / метод, чтобы добавить маркер на свою карту:
После создания функции я помещаю этот код на,
onMapReady()
чтобы удалить маркер и создать новый:Это бонус, если вы хотите отображать местоположение адреса при нажатии на маркер, добавьте этот код, чтобы скрыть и показать адрес маркера, но вам нужен метод для получения местоположения адреса. Я получил код из этого сообщения: Как получить полный адрес по широте и долготе?
источник
используйте следующий код:
как только вы нажмете на «маркер» , вы можете удалить его.
источник
Просто ПРИМЕЧАНИЕ, то, на что я потратил часы сегодня вечером ...
Если по какой-то причине вы решили удерживать маркер после УДАЛЕНИЯ его с карты ... getTag вернет NULL, даже если оставшиеся значения get вернутся со значениями, которые вы установили для них при создании маркера. ,
Значение TAG устанавливается в NULL, если вы когда-либо удаляете маркер, а затем пытаетесь ссылаться на него.
Мне кажется, что это ошибка ...
источник
1. Если вы хотите удалить маркер, вы можете сделать это. В качестве
marker.remove();
альтернативы вы также можете скрыть маркер, а не удалять его каки сделать его видимым позже, когда это необходимо.
2. Однако, если вы хотите удалить все маркеры с карты, используйте
map.clear();
Примечание:
map.clear();
также удалитPolylines, Circles
и т. Д.3. Если вы не хотите удалять
Polylines, Circles
и т. Д., Используйте цикл по длине маркера (если у вас несколько маркеров), чтобы удалить их. Посмотрите пример здесь ИЛИ установите их Visible false И не используйтеmap.clear();
в таком случае.источник
Сделайте глобальную переменную для отслеживания маркера
// Удаляем старый маркер
// Добавляем обновленный маркер и перемещаем камеру
источник
Создать массив со всеми маркерами при добавлении на карту.
Позже используйте:
источник
Для тех, кто следит за примером в этом проекте GoogleMaps - MapWithMarker , вы можете удалить маркер, сделав это.
источник