Eliminare un marcatore grafico da una mappa su una MapView

Da Gambas-it.org - Wikipedia.

Un marcatore grafico è un elemento opzionale ("item") che può essere aggiunto e mostrato, come figura grafica (shape), in una mappa.
Esso è caricato in una MapView, mediante i Metodi ".AddCircle()", ".AddMultipoint()", ".AddPoint()", ".AddPolygon()", ".AddPolyline()" del Metodo ".AddShape()", appartenente quest'ultimo alla Classe Map.

Per eliminare la figura grafica, ossia il marcatore grafico, precedentemente inserito, si dovrà utilizzare il Metodo ".Remove()" della Proprietà "Map" della Classe "MapView", specificando la sua chiave gerarchicamente sovraordinata identificativa, quale Shape generico.

Mostriamo un esempio, nel quale all'apertura del programma sarà impostato e mostrato un punto marcatore delle coordinate preliminarmente impostate. Cliccando poi sull'oggetto MapView si eliminerà il punto precedentemente inserito e se ne imposterà uno nuovo alle coordinate individuate con il puntatore del mouse.

Public Sub _New()
 
 MapView1.Map.AddTile("OpenTopo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png")
 
End 

Public Sub Form_Open()
 
 Dim mp As New MapPoint
 
 mp.Lat = 41.8902142
 mp.Lon = 12.4900422
 
 With MapView1.Map
   .Center = mp
   .Zoom = 10
' Imposta e mostra un punto marcatore delle coordinate:
   .AddShape("figura").AddPoint("marcatore", mp, Color.Default, Null)
 End With
 
End

Public Sub MapView1_MouseUp()
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
 Dim mp As New MapPoint
 
 With MapView1
' Ottiene le coordinate geografiche del punto ove si è cliccato sulla "MapView":
   mp = .Map.PixelToMapPointRel(pt)
' Elimina la figura (shape) precedentemente impostata.
' Affinché il marcatore grafico sia eliminato, va specificata nel Metodo ".Remove()" della Classe Map la sua chiave gerarchicamente sovraordinata identificativa, quale "Shape" generico.
   .Map.Remove("figura")
' Aggiunge una nuova figura (shape) alle coordinate ricavate dal puntatore:
   .Map.AddShape("figura").AddPoint("marcatore", mp, Color.Default, Null)
   .Refresh()
   .Map.Refresh()
 End With
   
End


Eliminare più item (Shape) inseriti

Gli "item" vengono inseriti dal Metodo ".AddShape()" come in un array. Pertanto, quando si intende eliminare uno o più item inseriti, bisognerà tenerne conto.
In particolare va detto che il Metodo ".Remove()" elimina il primo elemento (item) inserito. Pertanto, se si vogliono eliminare gli item inseriti e aventi la medesima chiave identificatrice, bisognerà utilizzare un ciclo. Ciò significa che - come peraltro già scritto - volendo eliminare "item", bisognerà tenere il conto nel programma di quanti "item" vengono inseriti nella mappa.

Mostriamo un esempio pratico:

Public Sub Form_Open()
 
 With MapView1.Map
   .AddTile("OpenTopo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png")
   .Center = MapPoint(41.8902142, 12.4900422)
   .Zoom = 12
 End With
 
End

Public Sub MapView1_MouseUp()
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
 
' Se si clicca con il tasto destro del mouse, si inserisce un cerchio:
 If Mouse.Right Then 
   With MapView1
     .Map.AddShape("cerchi").AddCircle("cerchio", MapPoint(.Map.PixelToMapPointRel(pt).Lat, .Map.PixelToMapPointRel(pt).Lon), 50, Color.Orange, 30, Line.Solid)
     .refresh()
   End With 
 Endif 
 
' Se si clicca con il tasto centrale del mouse, si eliminano in una sola volta tutti i cerchi inseriti:
 If Mouse.Middle And Object.IsValid(MapView1.Map.GetShape("cerchi")) Then 
' Compie un ciclo pari al numero di item validi inseriti:
   Repeat
     With MapView1
       .Map.Remove("cerchi")
       .Refresh()
     End With 
' Compie un ciclo fino a che l'Oggetto "_MapShape" è valido, ossia fino a che sono ancora presenti gli item precedentemente inseriti:
   Until Not Object.IsValid(MapView1.Map.GetShape("cerchi"))
 Endif 
 
End