public void removeMarker(Airplane airplane) {
   synchronized (markers) {
     for (Marker m : markers) {
       if (m.getTitle().equals(airplane.getHex())) {
         m.remove();
         markers.remove(m);
         airplanes.remove(airplane.getHex());
         break;
       }
     }
   }
 }
  public void addMarker(Airplane airplane) {
    AirplanePosition position = airplane.getLastPosition();
    LatLng location = new LatLng(position.getLatitude(), position.getLongitude());
    float angle = (float) airplane.getHead() - map.getCameraPosition().bearing;

    MarkerOptions options = new MarkerOptions();
    options.position(location);
    options.title(airplane.getHex());
    options.icon(BitmapDescriptorFactory.fromBitmap(getAirplaneIcon(angle)));
    options.anchor(0.5f, 0.5f);

    Marker marker = map.addMarker(options);
    markers.add(marker);
  }
  public void updateMarker(Airplane airplane) {
    for (Marker m : markers) {
      boolean infoShow = m.isInfoWindowShown();
      if (m.getTitle().equals(airplane.getHex())) {
        AirplanePosition position = airplane.getLastPosition();
        LatLng location = new LatLng(position.getLatitude(), position.getLongitude());
        float angle = (float) airplane.getHead() + map.getCameraPosition().bearing;
        m.setPosition(location);
        m.setIcon(BitmapDescriptorFactory.fromBitmap(getAirplaneIcon(angle)));

        if (infoShow) m.showInfoWindow();
        break;
      }
    }
  }
  public void updateAirplaneTrack(Airplane airplane) {
    if (currentAirplaneSelected != null
        && currentAirplaneSelected.getHex().equals(airplane.getHex())) {
      List<AirplanePosition> track = airplane.getRoute();

      for (int i = 0; i < track.size() - 1; i++) {
        AirplanePosition pos1 = track.get(i);
        AirplanePosition pos2 = track.get(i + 1);

        if (!currentPolyTrack.containsKey(pos1.getId())) {
          Log.i("DEBUG", "Atualizando linha para o avião");
          Polyline line =
              map.addPolyline(
                  new PolylineOptions()
                      .add(
                          new LatLng(pos1.getLatitude(), pos1.getLongitude()),
                          new LatLng(pos2.getLatitude(), pos2.getLongitude()))
                      .width(5)
                      .color(getColorFromAltitude((float) pos1.getAltitude())));
          currentPolyTrack.put(pos1.getId(), line);
        }
      }
    }
  }
  public void addAirplaneTrack(Airplane airplane) {
    updaterService.doGetRouteFrom(airplane);
    List<AirplanePosition> track = airplane.getRoute();

    for (int i = 0; i < track.size() - 1; i++) {
      Log.i("DEBUG", "Criando linha para o avião");
      AirplanePosition pos1 = track.get(i);
      AirplanePosition pos2 = track.get(i + 1);
      Polyline line =
          map.addPolyline(
              new PolylineOptions()
                  .add(
                      new LatLng(pos1.getLatitude(), pos1.getLongitude()),
                      new LatLng(pos2.getLatitude(), pos2.getLongitude()))
                  .width(5)
                  .color(getColorFromAltitude((float) pos1.getAltitude())));

      currentPolyTrack.put(pos1.getId(), line);
    }
  }