Differenze tra le versioni di "Mostrare un Balloon sulla MapView se il puntatore del mouse è dentro una determinata area della mappa"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 
Mostriamo di seguito un possibile codice, ampiamente commentato, per far apparire un ''Balloon'' sulla ''MapView'' se il puntatore del mouse è all'interno di una determinata area quadrata (ma potrebbe essere anche rettangolare) prestabilita della mappa.
 
Mostriamo di seguito un possibile codice, ampiamente commentato, per far apparire un ''Balloon'' sulla ''MapView'' se il puntatore del mouse è all'interno di una determinata area quadrata (ma potrebbe essere anche rettangolare) prestabilita della mappa.
 
  Private mp1 As New MapPoint(41.891095, 12.491366) <FONT Color=gray>' ''Le coordinate geografiche del vertice in alto a sinistra dell'area''</font>
 
  Private mp1 As New MapPoint(41.891095, 12.491366) <FONT Color=gray>' ''Le coordinate geografiche del vertice in alto a sinistra dell'area''</font>
  Private Const LATO As Byte = 30                  <FONT Color=gray>' ''La dimensione che assumerà ciascun lato dell'area''</font>
+
  Private Const COEFFICIENTE As Short = 400
  Private rct As Rect
+
  Private rct As RectF
 
   
 
   
 
   
 
   
Riga 21: Riga 21:
 
   
 
   
 
   With MapView1.Map
 
   With MapView1.Map
  <FONT Color=gray>' ''Imposta l'area (in tal caso un quadrato immaginario), che determinerà l'apparizione del "Balloon", qualora il puntatore del mouse dovesse capitarvi all'interno:''</font>
+
  <FONT Color=gray>' ''Imposta l'area (in tal caso un quadrato immaginario), che determinerà l'apparizione del "Balloon", qualora il puntatore del mouse dovesse capitarvi all'interno.''
     rct = Rect(.MapPointToPixelRel(mp1).X, .MapPointToPixelRel(mp1).Y, LATO + ((LATO * .Zoom) / 15), LATO + ((LATO * .Zoom) / 15))
+
' ''L'espressione presente nel 3° e nel 4° argomento serve per mantenere proporzionata la dimensione dell'area al variare dello zoom della mappa.</font>
 +
     rct = RectF(.MapPointToPixelRel(mp1).X, .MapPointToPixelRel(mp1).Y, COEFFICIENTE / (2 ^ (.MaxZoom - .Zoom)), COEFFICIENTE / (2 ^ (.MaxZoom - .Zoom)))
 
   End With
 
   End With
 
    
 
    

Versione delle 22:23, 7 gen 2022

Mostriamo di seguito un possibile codice, ampiamente commentato, per far apparire un Balloon sulla MapView se il puntatore del mouse è all'interno di una determinata area quadrata (ma potrebbe essere anche rettangolare) prestabilita della mappa.

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