2015-07-15 25 views
3

У меня есть флажок, в котором пользователь может выбрать несколько маршрутов, после чего от сервера возвращается ответ. У меня есть метод gotoLocation, чтобы убрать местоположение маркеров, чтобы добавить новый маркер на карте, когда новый вставлен в таблицу на сервере с тем же маршрутом.Преобразовать строку в маркер в Google Map, чтобы удалить старый маркер на карте

У меня была проблема с добавлением нового маркера на карту, поэтому, когда я вставил данные для нового маркера с тем же выбранным маршрутом в моей таблице базы данных, новый вставленный не был добавлен на карту. Я сохранил идентификатор и маркер в HashMap, прежде чем решить эту проблему, сохранив данные маркера как String в HashMap, в этом случае новые вставленные данные добавляются к карте в качестве маркера.

Сейчас в Update block Мне нужно преобразовать эти данные latit,longit, rout_dirc в маркер, чтобы удалить старый с карты и HashMap перед обновлением его местоположения. Как я могу это сделать в моем случае? Как я могу удалить старый маркер с карты, так как у меня нет маркера в HashMap, теперь я тоже не могу использовать marker.remove(), чтобы удалить старый?

Я признателен за любую помощь

Код:

public class Map extends FragmentActivity { 

    GoogleMap map; 
    static HashMap<Integer, String> markerMap = new HashMap<Integer, String>(); 
    static String marker_string; 

    static Marker marker = null; 
    private void gotoLocation(int id, double lat, double lng, 
      String route_direct) { 
     final float zoom = 11; 
     LatLng ll = null; 
     if (markerMap.containsKey(id)) { 
      // Update the location. 
      marker_string = markerMap.get(id);    
      String[] marker_string_split = marker_string.split(","); 
      double latit = Double.parseDouble(marker_string_split[0]); 
      double longit = Double.parseDouble(marker_string_split[1]); 
      String rout_dirc = marker_string_split[2]; 

      LatLng LL_2 = new LatLng(lat, lng); 
      MarkerOptions markerOpt2 = new MarkerOptions().title(route_direct) 
        .position(LL_2); 

      // This here doest work. 
      marker.remove(); 

      // Remove from the HashMap tp add the new one. 
      markerMap.remove(id); 

      ll = new LatLng(lat, lng); 
      MarkerOptions markerOpt = new MarkerOptions().title(route_direct) 
        .position(ll); 
      marker = map.addMarker(markerOpt); 

      String lat1 = Double.toString(lat); 
      String lng1 = Double.toString(lng); 
      String data = lat1 + "," + lng1 + "," + route_direct; 
      markerMap.put(id, data); 
      zoom(); 

     } else { 
      // Add a new marker 
      String lat1 = Double.toString(lat); 
      String lng1 = Double.toString(lng); 
      String data = lat1 + "," + lng1 + "," + route_direct; 
      markerMap.put(id, data); 

      ll = new LatLng(lat, lng); 
      MarkerOptions markerOpt = new MarkerOptions().title(route_direct) 
        .position(ll); 
      marker = map.addMarker(markerOpt); 
      zoom(); 


     } 
    } 
} 

ответ

0

Похоже, ваш маркер в marker.remove(); установлено нулевое значение, и это не будет никакой пользы, если у вас нет ссылки маркеров вы хотите удалить. Если вы хотите удалить все старые маркеры, вы можете попробовать следующее:

mMap = super.getMap(); 
map.clear(); 

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

Например, переменная маркер:

Marker marker = map.addMarker(..); 

Затем вы можете удалить его с помощью marker.remove(); Надеюсь, что это имеет смысл;

+0

Я не хочу удалять все маркеры на карте. Я хочу удалить маркер с определенным 'id', чтобы обновить его местоположение. –

+0

У меня есть идея, но я думаю, что это немного глупо. Но вы можете попробовать. Поэтому, если у вас есть идентификатор вашего маркера, удалите lat/lng из HashMap, получив его с данного идентификатора. Добавьте любые новые точки lat/lng, которые вам нужны, а затем нажмите новый набор точек lat/lng на карту, выполнив петлю карты. Затем все ваши маркеры все еще существуют, кроме тех, которые были удалены. –

+0

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