2015-05-27 12 views
6

Używam kodu GMap.NET do map i znaczników. Dodawanie znaczników i robienie czegokolwiek z mapą nie było problemem z usunięciem jednego znacznika z mapy, z którą mam problemy. Sprawdzałem wszędzie w Google, czy usunąć znacznik z mapy, ale usunięcie znacznika nie wydaje się być gorącym tematem.Usuwanie znaczników Gmap.net

Oto fragment kodu, którego używam do dodania.

 private void AddMarker_ButtonClick(object sender, AddMarkerEventArgs e) 
    { 
     DBDictAdd("Marker", " ",e.Latitude, e.Longitude, true, "192.168.1.1"); 
     m_dbMarkers.Insert(_table, dbmarkertable); 
     dbmarkertable.Clear(); 
     GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(e.Latitude, e.Longitude), 
       GMarkerGoogleType.green); 
     marker.ToolTip = new GMapRoundedToolTip(marker); 
     marker.ToolTipMode = MarkerTooltipMode.OnMouseOver; 
     marker.Tag = MarkerIndex; 
     marker.ToolTipText = (marker.Position.ToString()); 
     markersOverlay.Markers.Add(marker); 
     MarkerIndex++; 
    } 

Jak widać używam SQLite przechowywać ID i inne informacje do bazy danych dla znaczników. Używam podejścia bazodanowego, ponieważ będę musiał przechowywać więcej informacji z lokalizacją znacznika. Ta część kodu działa.

Problem polegający na wywołaniu informacji o znaczniku, więc mogę go usunąć. Wiem, że te 2 połączenia istnieją.

markersOverlay.Markers.Remove(); 
markersOverlay.Markers.RemoveAt(); 

użyłem komendy removeAt ale musiałem to zrobić ręcznie za pomocą polecenia i zauważyłem ten removeAt(0) zabiera go od pierwszego wejścia tej tablicy za każdym razem.

To co próbowałem dotąd:

private void uxRemoveMarkerButton_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("Select the marker to remove."); 
      uxGmap.OnMarkerClick += new MarkerClick(uxGmap_OnMarkerClick); 

     } 

     private void uxGmap_OnMarkerClick(object sender, EventArgs e) 
     { 
      //int? mID = null; 
      //DataTable da = m_dbMarkers.GetDataTable("SELECT * from markers"); 
      //GMapMarker marker = null; 
      //PointLatLng p = new PointLatLng(lat, lng); 
      //foreach (GMapMarker m in markersOverlay.Markers) 
      //{ 
      // if (m.Position == p) 
      //  marker = m; 
      //} 
      //markersOverlay.Markers.Remove(marker); 
      //MessageBox.Show("done"); 
      //foreach (DataRow dr in da.Rows) 
      //{ 
      // if (Convert.ToDouble(dr[3]) == lat) 
      // { 
      //  MessageBox.Show(dr[3].ToString()); 
      //  //mID = Convert.ToInt32(dr[0]); 
      // } 
      //} 
      //markersOverlay.Markers.IndexOf(marker); 

      //mID= Convert.ToInt32(m_dbMarkers.ExecuteScalar("SELECT ID FROM markers")); 
      //m_dbMarkers.Delete(_table, String.Format("markers.ID = {0} ", mID)); 
      //markersOverlay.Markers.RemoveAt(mID); 
      //MessageBox.Show(mID.ToString()); 
      uxGmap.OnMarkerClick -= new MarkerClick(uxGmap_OnMarkerClick); 

     } 

jakieś sugestie lub wskazówki, w jaki sposób mogę uzyskać identyfikator markera lub markera się po kliknięciu na niego, aby faktycznie usunąć go z mapy?

EDIT: zaktualizowałem AddMarker_ButtonClick

Odpowiedz

2

Rozwiązanie znalazłem się usuwając znacznik z mapy:

GMap.Net ma MarkerClick zdarzenie, które można subskrybować. W mojej formie jest to kod, którego użyłem i gdzie umieściłem go w kodzie formularza.

Public Form1() 
    { 
      uxGmap.OnMarkerClick += new MarkerClick(uxGmap_OnMarkerClick); 
    } 

Kod wewnątrz uxGmap_OnMarkerClick

private void uxGmap_OnMarkerClick(GMapMarker item, MouseEventArgs e) 
    { 
     currentMarker = item; 
     uxRemoveMarkerButton.Enabled = true; 
    } 

mam globalnym GMapMarker nazywa currentMarker który przechowuje znacznik item że kliknąć. Włączam również przycisk, aby usunąć znacznik w moim formularzu.

Potem użyć Kliknij przycisk, aby usunąć znacznik z mapy za pomocą:

private void uxRemoveMarkerButton_Click(object sender, EventArgs e) 
    { 
      int? mID = null; 
      if(currentMarker != null) 
      { 
       mID = Convert.ToInt32(currentMarker.Tag); 
       markersOverlay.Markers.Remove(currentMarker); 
       currentMarker = null; 
      } 
      m_dbMarkers.Delete(_table, String.Format("markers.ID = {0} ", mID)); 
      uxRemoveMarkerButton.Enabled = false; 
    } 

GMapMarker ma Tag właściwość gdzie można przechowywać identyfikator znacznika do znacznika. Następnie wyodrębniam ten identyfikator z mojego globalnego currentMarker.Tag i zapisuję go w lokalnej int mID. Używam tego mID, aby usunąć wiersz z identyfikatorem ID, który zapisałem w bazie danych sqlite, którą posiadam. Również wyłączam przycisk, aby nie dopuścić do błędu użytkownika, dopóki znacznik nie zostanie kliknięty.