android добавляет и удаляет метки без вызова clear ()

#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 занимает много памяти.