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