2017-01-09 4 views
0

Я хочу обновить позиции маркеров. В настоящее время я удаляю элемент и сразу добавляю его с новой позицией, но я не уверен, что это правильный подход. Я хотел бы сделать это, чтобы обновить эту позицию маркеров до нового значения, не удаляя/не добавляя ее обратно. Является ли это возможным?Утилита Google Maps Google - обновление положения маркера кластера

Я попытался следующим:

var cluster_item = iterator.next(); 
var marker = dis.cluster_renderer.getMarker(cluster_item); 
marker.setPosition(new dis.maps.model.LatLng(0, 0)); 

.. но его как временный набор, как только я отдалять кластер и другие маркеры повторной визуализации и положение устанавливается в исходное.

Текущий код:

// Updates all items 
var items = dis.cluster_manager_algorithm.getItems(); 
var iterator = items.iterator(); 
//while (iterator.hasNext()) { 
if (iterator.hasNext()) { 
    var cluster_item = iterator.next(); 

    dis.cluster_manager.removeItem(cluster_item); 

    var item = new dis.clustering.ClusterItem({ 
     //rotation: marker.rotation, 
     getPosition: function() { 
      return new dis.maps.model.LatLng(new_position.latitude, new_position.longitude); 
     }, 
     userData: {imei: "some_imei"} 
    }); 
    dis.cluster_manager.addItem(item); 

    // update view 
    dis.cluster_manager.cluster(); 
} 
+0

Что именно вы хотите сделать? вы просто хотите изменить положение маркера в соответствии с новым lat lng? –

+0

Да, это то, что я хочу – Starwave

ответ

0

Давайте простой пример добавления маркеров на моей позиции .Whenever моих изменений местоположения, маркер будет идти на этой позиции. -

@Override 
     public void onLocationChanged(Location location) { 
      marker.setPosition(new LatLng(location.getLatitude, location.getLongitude)); 
     } 

Теперь, где бы вы получаете LatLng вы можете просто использовать marker.setPosition(latlng).

EDIT Для навалочных маркеров используют .Assume у вас есть ArrayList, имеющий LatLng locationList<LatLng>.

@Override 
public void onMapReady(GoogleMap map) { 
for(int i=0 ;i<locationList.size();i++){ 
map.addMarker(new MarkerOptions() 
    .position(locationList.get(i)) 
    .title("Marker").icon()); 
}} 

Если вы хотите использовать ClusterMarker согласно требованию, вы можете найти простой учебник here .Также есть демо приложение присутствует here.

+0

Я уже заявил в своем вопросе, что уже пробовал 'marker.setPosition'. Он работает только временно, когда карта будет уменьшена и снова увеличена, кластеры повторно отображают эти элементы с их исходными позициями. Я должен изменить это исходное положение, а не временную позицию маркера. – Starwave

+0

Эти элементы хранятся в классе Алгоритм (https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/clustering/algo/NonHierarchicalDistanceBasedAlgorithm.java), но я не вижу возможности напрямую изменить позицию позиции. – Starwave

+0

честно говоря, я не понимаю, что вы хотите сказать. «когда карта будет увеличена и снова увеличена». маркер остается на каком месте? Недавно я работал над приложением, таким как Uber. Мы используем 'marker.setPosition' для обновления положения драйверов на карте, и он выглядит как движущийся автомобиль на карте, пользователь может масштабировать или масштабировать, маркер остается на том месте, где он должен быть –