Differenze tra le versioni di "Utilizzare una DrawingArea o una ImageView con gb.map anziché una MapView"

Da Gambas-it.org - Wikipedia.
Riga 16: Riga 16:
 
    
 
    
 
   With mappa = New Map
 
   With mappa = New Map
     .AddTile("GoogleMaps", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "900"]).SubDomains = ["0", "1", "2"]  <FONT Color=gray>'</font> <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
+
     .AddTile("GoogleMaps", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "904"]).SubDomains = ["0", "1", "2"]  <FONT Color=gray>'</font><SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
 
     .Center = mp
 
     .Center = mp
 
     .Zoom = 15
 
     .Zoom = 15
Riga 116: Riga 116:
 
    
 
    
 
   With mappa = New Map
 
   With mappa = New Map
     .AddTile("GoogleMaps", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "900"]).SubDomains = ["0", "1", "2"]
+
     .AddTile("GoogleMaps", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "904"]).SubDomains = ["0", "1", "2"]
 
     .Center = mp
 
     .Center = mp
 
     .Zoom = 15
 
     .Zoom = 15
Riga 204: Riga 204:
  
 
=Note=
 
=Note=
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto: ["version": "900"].
+
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "904"].
 
<BR>Al riguardo vedere: [[Conoscere_la_versione_più_recente_di_Google_Maps_satellite|Conoscere la versione più recente di Google Maps satellite]]
 
<BR>Al riguardo vedere: [[Conoscere_la_versione_più_recente_di_Google_Maps_satellite|Conoscere la versione più recente di Google Maps satellite]]
  
 
[2] Vedere anche: [[Ottenere_un%27Image_dalla_mappa_mostrata_da_una_MapView|Ottenere un'Image dalla mappa mostrata da una MapView]]
 
[2] Vedere anche: [[Ottenere_un%27Image_dalla_mappa_mostrata_da_una_MapView|Ottenere un'Image dalla mappa mostrata da una MapView]]

Versione delle 15:30, 9 lug 2021

Per mostrare una mappa con il Componente gb.map, è possibile usare una DrawingArea o una ImageView anziché una MapView.

Uso di una DrawingArea

Mostriamo un semplice codice con l'uso di una DrawingArea al posto di una MapView.
Bisognerà ovviamente attivare il Componente gb.map .

Private DrawingArea1 As DrawingArea
Private mappa As Map
Private mp As New MapPoint(41.9, 12.5)
Private mx As Integer
Private my As Integer
Private pt As New Point
Private cpx As New Point
 
 
Public Sub _New()    
 
 With mappa = New Map
   .AddTile("GoogleMaps", "https://khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "904"]).SubDomains = ["0", "1", "2"]   '[Nota 1]
   .Center = mp
   .Zoom = 15
 End With
 With Me  
   .W = Desktop.W
   .H = Desktop.H
   .Arrangement = Arrange.Fill
   .Text = "Zoom: " & CStr(mappa.Zoom)
 End With
 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
   .X = 0
   .Y = 0
 End With
 
End
  
Public Sub DrawingArea1_Draw()
 
 With mappa
   .Width = Paint.W
   .Height = Paint.H
   .Center = mp
   .Draw()
 End With
 
 DrawingArea1.Refresh()
 
End
 
Public Sub DrawingArea1_MouseDown()  
 
 pt = Point(Mouse.X, Mouse.Y)
 
 Me.Text = "Lat. " & Format(mappa.PixelToMapPointRel(pt).Lat, "0.000000") & 
           "   Lon. " & Format(mappa.PixelToMapPointRel(pt).Lon, "0.000000") &
           "  -  Zoom: " & CStr(mappa.Zoom)
 
 mx = pt.X  
 my = pt.Y
 cpx = Geo.MapPointToPixel(mappa.Center, mappa.Zoom)
 
' Se si clicca sulla mappa con il tasto centrale, viene creato un file immagine della mappa corrente mostrata: ' [Nota 2]
 If Mouse.Middle Then
   Dim im As New Image(mappa.Width, mappa.Height, Color.Transparent, Image.Standard)
   With Paint
     .Begin(im)
     mappa.Draw()
     .End
   End With
   im.Save("/tmp/immagine.png", 100)
 Endif
 
End

Public Sub DrawingArea1_MouseMove()  
 
 Dim pix As New Point(cpx.X, cpx.Y)
 
 pix.X += mx - Mouse.X
 pix.Y += my - Mouse.Y
 
' Le seguenti righe di comando consentono uno spostamento morbido e uniforme della mappa per ciascun livello di zoom:
 mappa.Center.Lat = Geo.PixelToMapPoint(pix, mappa.Zoom).Lat
 mappa.Center.Lon = Geo.PixelToMapPoint(pix, mappa.Zoom).Lon
   
End

Public Sub DrawingArea1_MouseWheel()
 
' Pone al centro della mappa il punto ove si è ruotata la rotellina: 
 pt = Point(Mouse.X, Mouse.Y)
 mp.Lat = mappa.PixelToMapPointRel(pt).Lat
 mp.Lon = mappa.PixelToMapPointRel(pt).Lon
 
' Valuta il verso della rotazione della rotellina: 
 If Mouse.Delta > 0 Then 
   mappa.Zoom += 1
 Else 
   mappa.Zoom -= 1
 Endif
 Me.Text = "Zoom: " & CStr(mappa.Zoom)
 
End


Uso di una ImageView

Mostriamo un semplice codice con l'uso di una ImageView al posto di una MapView.

Private ImageView1 As ImageView
Private mappa As Map
Private mp As New MapPoint(41.9, 12.5)
Private mx As Integer
Private my As Integer
Private pt As New Point
Private cpx As New Point


Public Sub _New()
 
 With mappa = New Map
   .AddTile("GoogleMaps", "https://khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "904"]).SubDomains = ["0", "1", "2"]
   .Center = mp
   .Zoom = 15
 End With
 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
   .Text = "Zoom: " & CStr(mappa.Zoom)
 End With
 With ImageView1 = New ImageView(Me) As "ImageView1"
   .X = 0
   .Y = 0
 End With
 
End

Public Sub ImageView1_Draw(View As Image)
 
 With mappa
   .Width = Paint.W
   .Height = Paint.H
   .Center = mp
   .Draw()
 End With
 
 ImageView1.Refresh()
  
End

Public Sub ImageView1_MouseDown()  

 pt = Point(Mouse.X, Mouse.Y)

 Me.Text = "Lat. " & Format(mappa.PixelToMapPointRel(pt).Lat, "0.000000") & 
           "   Lon. " & Format(mappa.PixelToMapPointRel(pt).Lon, "0.000000") &
           "  -  Zoom: " & CStr(mappa.Zoom)

 mx = Mouse.X
 my = Mouse.Y
 cpx = Geo.MapPointToPixel(mappa.Center, mappa.Zoom)
 
' Se si clicca sulla mappa con il tasto centrale, viene creato un file immagine della mappa corrente mostrata:
 If Mouse.Middle Then
   Dim im As New Image(mappa.Width, mappa.Height, Color.Transparent, Image.Standard)
   With Paint
     .Begin(im)
     mappa.Draw()
     .End
   End With
   im.Save("/tmp/immagine.png", 100)
 Endif

End

Public Sub ImageView1_MouseMove()
 
 Dim pix As New Point(cpx.X, cpx.Y)
 
 pix.X += mx - Mouse.X
 pix.Y += my - Mouse.Y
 
' Le seguenti righe di comando consentono uno spostamento morbido e uniforme della mappa per ciascun livello di zoom:
 mappa.Center.Lat = Geo.PixelToMapPoint(pix, mappa.Zoom).Lat
 mappa.Center.Lon = Geo.PixelToMapPoint(pix, mappa.Zoom).Lon
 
End

Public Sub ImageView1_MouseWheel()
 
 pt = Point(Mouse.X, Mouse.Y)
 mp.Lat = mappa.PixelToMapPointRel(pt).Lat
 mp.Lon = mappa.PixelToMapPointRel(pt).Lon

 Select Case Mouse.Delta
   Case 1
     mappa.Zoom += 1
   Case -1
     mappa.Zoom -= 1
 End Select
 
 Me.Text = "Zoom: " & CStr(mappa.Zoom)
 
End


Note

[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "904"].
Al riguardo vedere: Conoscere la versione più recente di Google Maps satellite

[2] Vedere anche: Ottenere un'Image dalla mappa mostrata da una MapView