Sapere sulla MapView se il puntatore del mouse è all'interno di una determinata area della mappa

Da Gambas-it.org - Wikipedia.

Mostriamo di seguito un possibile codice, ampiamente commentato, per verificare sulla MapView se il puntatore del mouse è all'interno di una determinata area quadrata (ma potrebbe essere anche rettangolare) prestabilita della mappa.
L'area resterà comunque proporzionata al variare dello zoom della mappa.

Nell'esempio mostrato, l'area quadrata in questione comprende l'intero "Colosseo" in Roma.

Private mp1 As New MapPoint(41.891095, 12.491366) ' Le coordinate geografiche del vertice in alto a sinistra dell'area
Private Const COEFFICIENTE As Short = 400
Private rct As RectF


Public Sub Form_Open()

 With MapView1.Map
   .AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
   .Zoom = 15
' Imposta il centro della mappa mostrata all'inizio:
   .Center = mp1
 End With 
 
End

' Si pone tale successiva istruzione all'interno di questo Evento della "MapView", afficnhé l'Oggetto "Rect" acquisisca dall'Oggetto "Map" le coordinate in pixel (.X e .Y) dalle coordinate geografiche fissate per il punto geografico che sarà interessato dal "Ballon".
' Se l'istruzione viene posta invece all'interno di un Evento del "Form", l'Oggetto "Rect" non acquisirà le predette coordinate.
Public Sub MapView1_Draw()

 With MapView1.Map
' Imposta l'area (in tal caso un quadrato immaginario), che determinerà l'apparizione del "Balloon", qualora il puntatore del mouse dovesse capitarvi all'interno.
' L'espressione presente nel 3° e nel 4° argomento serve per mantenere proporzionata la dimensione dell'area al variare dello zoom della mappa.
   rct = RectF(.MapPointToPixelRel(mp1).X, .MapPointToPixelRel(mp1).Y, COEFFICIENTE / (2 ^ (.MaxZoom - .Zoom)), COEFFICIENTE / (2 ^ (.MaxZoom - .Zoom)))
 End With
 
End

Public Sub MapView1_MouseMove()

 Dim pt As New Point(Mouse.X, Mouse.Y)
 Dim mp2 As MapPoint = MapView1.Map.PixelToMapPointRel(pt)
' Per verificare se il puntatore del mouse è entrato nell'area prestabilita, bisogna tenere conto delle "coordinate geografiche" sulla mappa, e NON delle coordinate X e Y della "MapView":
 Dim x As Short = MapView1.Map.MapPointToPixelRel(mp2).X
 Dim y As Short = MapView1.Map.MapPointToPixelRel(mp2).Y

 Me.Text = Format(mp2.Lat, "#.000000") & "    " & Format(mp2.Lon, "#.000000")

' Se il puntatore del mouse è all'interno dell'area stabilita, viene mostrato in quel punto un "Balloon":
 If rct.Contains(x, y) Then 
   Balloon.Info("Anfiteatro Flavio (Colosseo)", MapView1, x, y)
 Else 
   Balloon.Hide
 Endif

End