Sto usando il codice GMap.NET per mappe e marcatori. Aggiungere marcatori e fare qualsiasi cosa con la mappa non è stato il problema della rimozione di un singolo marker dalla mappa con cui ho problemi. Ho cercato ovunque su Google di rimuovere un indicatore dalla mappa ma rimuovere un marker non sembra essere un argomento scottante.Rimozione marcatore Gmap.net
Ecco lo snippet dal codice che uso per aggiungere.
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++;
}
Come potete vedere sto usando SQLite
per memorizzare il ID
e altre informazioni nel database per i marcatori. Sto usando l'approccio del database perché avrò bisogno di memorizzare più informazioni con la posizione del marcatore. Questa parte del codice funziona.
Il problema che sto avendo è chiamare le informazioni sul marker in modo da poterlo rimuovere. So che queste 2 chiamate esistono.
markersOverlay.Markers.Remove();
markersOverlay.Markers.RemoveAt();
ho usato il comando removeAt
ma ho dovuto farlo manualmente e notato usando il comando removeAt(0)
prende dal primo ingresso di tale matrice ogni volta.
Questo è quello che ho provato finora:
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);
}
Eventuali suggerimenti o linee guida su come posso ottenere l'ID pennarello o marcatore stesso quando clicco su di esso per rimuovere in realtà dalla mappa?
EDIT: ho aggiornato il AddMarker_ButtonClick