#android #google-maps #marker
#Android #google-карты #маркер
Вопрос:
У меня есть карта, при перемещении камеры она вызывает api для получения данных и добавления новых маркеров.
например, в первый раз я получаю 4 маркера [a b c d] из api
и после того, как я перетаскиваю карту, я получаю [b c d e] из api
Я не хочу вызывать map.clear(), а затем добавлять новые, так как это вызовет вспышку (все маркеры исчезнут и вернутся)
какой эффективный способ просто удалить «a» и добавить «e» я пытался избежать использования циклов for (нужно будет сравнить все данные на основе их широты / lng, может замедляться из-за меток кучи).
Я обнаружил, что кто-то использует QuadTree для достижения этой цели, но не уверен, как именно это работает.
ОБНОВЛЕНИЕ: ключевым моментом является то, как определить, какие метки удалять, а какие добавлять
Есть идеи?
Ответ №1:
Вы можете удалить a Marker
с карты, выполнив marker.remove();
. Например:
Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(40, 4)));
// More code
marker.remove();
В вашем случае вы можете использовать a HashMap
для сохранения ваших Marker
s с заданным идентификатором, а затем запросить HashMap
, чтобы удалить их с карты:
private Map<String, Marker> markers = new HashMap<>();
//
markers.put("markerName", mMap.addMarker(new MarkerOptions().position(new LatLng(40, 4)))); // Add the marher to the map and to the hashmap
markers.remove("markerName") // Find and remove the marker from the hashmap
.remove(); // Remove the marker from the map
Комментарии:
1. но мне нужно сравнить 2 набора дат, чтобы определить, какие маркеры нужно удалить, а какие добавить, я ищу лучший способ найти их, а не делать в цикле for
2. это может помочь, я могу использовать id в качестве ключа, но мне все еще нужна итерация, чтобы выяснить, какую метку нужно удалить, а HashMap занимает много памяти.