Differenze tra le versioni di "Utilizzare una MediaView con gb.map anziché una MapView"

Da Gambas-it.org - Wikipedia.
 
(6 versioni intermedie di uno stesso utente non sono mostrate)
Riga 7: Riga 7:
 
Nel contempo sarà possibile vedere anche un file video oppure ascoltare un file audio, cliccando sul tastino di avvio, posto in basso a sinistra dell'Oggetto ''MediaView''. In caso di visualizzazione di un Video o avvio di un file audio, la mappa-tile sarà coperta dal video o - nel caso del file audio - da uno sfondo scuro. Cliccando però sul tastino di arresto del ''MediaView'', si tornerà a visualizzare la mappa.
 
Nel contempo sarà possibile vedere anche un file video oppure ascoltare un file audio, cliccando sul tastino di avvio, posto in basso a sinistra dell'Oggetto ''MediaView''. In caso di visualizzazione di un Video o avvio di un file audio, la mappa-tile sarà coperta dal video o - nel caso del file audio - da uno sfondo scuro. Cliccando però sul tastino di arresto del ''MediaView'', si tornerà a visualizzare la mappa.
  
Esempio pratico (ovviamente è necessario attivare i Componenti "gb.map", "gb.media" e "gb.media.form") <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>:
+
Esempio pratico (ovviamente è necessario attivare i Componenti "gb.map", "gb.media" e "gb.media.form") <SUP>&#091;[[#Note|nota 1]]&#093;</sup>:
 
  Private MediaView1 As MediaView
 
  Private MediaView1 As MediaView
 
  Private DrawingArea1 As DrawingArea
 
  Private DrawingArea1 As DrawingArea
Riga 19: Riga 19:
 
   
 
   
 
   
 
   
  '''Public''' Sub _New()
+
  Public Sub _New()
 
   
 
   
 
   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": "944"]).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": "979"]).SubDomains = ["0", "1", "2"]
 
     .Center = mp
 
     .Center = mp
 
     .Zoom = 15
 
     .Zoom = 15
Riga 34: Riga 34:
 
   MediaView1 = New MediaView(Me) As "MediaView1"
 
   MediaView1 = New MediaView(Me) As "MediaView1"
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub Form_Open()
+
   
 +
Public Sub Form_Open()
 
   
 
   
 
   Dim med As Object
 
   Dim med As Object
Riga 57: Riga 58:
 
   Print Object.Type(pn1.Children[0])
 
   Print Object.Type(pn1.Children[0])
 
   
 
   
  <FONT Color=gray>' '''''Se durante l'esecuzione di un file audio si vuole vedere contestualmente anche la mappa, allora bisogna assegnare alla superficie di fondo della "DrawingArea" il valore della trasparenza. In tal caso, per, non sarà possibile spostare la mappa con il mouse. Ciò tornerà ad essere possibile, arrestando l'esecuzione dell'audio cliccando sul tastino dello stop del "MediaView" in basso a sinistra.'''''
+
  <FONT Color=gray>' '''''Se durante l'esecuzione di un file audio si vuole vedere contestualmente anche la mappa, allora bisogna assegnare alla superficie di fondo della "DrawingArea" il valore della trasparenza. In tal caso, però, non sarà possibile spostare la mappa con il mouse. Ciò tornerà ad essere possibile, arrestando l'esecuzione dell'audio cliccando sul tastino dello "STOP" del "MediaView" in basso a sinistra.'''''
 
  ' '''DrawingArea1.Background = Color.Transparent'''</font>
 
  ' '''DrawingArea1.Background = Color.Transparent'''</font>
 
   
 
   
Riga 63: Riga 64:
 
   Object.Attach(DrawingArea1, Me, "DrawingArea1")
 
   Object.Attach(DrawingArea1, Me, "DrawingArea1")
 
    
 
    
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub DrawingArea1_Draw()
+
   
 +
Public Sub DrawingArea1_Draw()
 
   
 
   
 
   With mappa
 
   With mappa
Riga 76: Riga 78:
 
   DrawingArea1.Refresh
 
   DrawingArea1.Refresh
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub DrawingArea1_MouseDown()   
+
   
 +
Public Sub DrawingArea1_MouseDown()   
 
   
 
   
 
   pt = Point(Mouse.X, Mouse.Y)
 
   pt = Point(Mouse.X, Mouse.Y)
Riga 102: Riga 105:
 
   Endif
 
   Endif
 
   
 
   
  '''End'''
+
  End
 
   
 
   
  '''Public''' Sub DrawingArea1_MouseMove()   
+
   
 +
Public Sub DrawingArea1_MouseMove()   
 
   
 
   
 
   Dim pix As New Point(cpx.X, cpx.Y)
 
   Dim pix As New Point(cpx.X, cpx.Y)
Riga 115: Riga 119:
 
   mappa.Center.Lon = Geo.PixelToMapPoint(pix, mappa.Zoom).Lon
 
   mappa.Center.Lon = Geo.PixelToMapPoint(pix, mappa.Zoom).Lon
 
   
 
   
  '''End'''
+
  End
 +
 
   
 
   
  '''Public''' Sub DrawingArea1_MouseWheel()
+
  Public Sub DrawingArea1_MouseWheel()
 
   
 
   
 
  <FONT Color=gray>' ''Impedisce che si vada oltre il massimo livello di zoom della mappa:''</font>
 
  <FONT Color=gray>' ''Impedisce che si vada oltre il massimo livello di zoom della mappa:''</font>
Riga 131: Riga 136:
 
   Me.Text = "Zoom: " & CStr(mappa.Zoom)
 
   Me.Text = "Zoom: " & CStr(mappa.Zoom)
 
   
 
   
  '''End'''
+
  End
  
  
  
 
=Note=
 
=Note=
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": 944].
+
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "979"].

Versione attuale delle 18:39, 2 mag 2024

Per mostrare una mappa di un Remote Tile Server, è possibile utilizzare anche un Oggetto MediaView, fornito dal Componente "gb.media".

In particolare, bisogna considerare che un Oggetto MediaView è composto - fra l'altro - da un Oggetto MediaPlayer che a sua volta ha, come "Figlio", un Panel "Figlio" che fa da contenitore ad alcuni Oggetti grafici (suoi "Figli"), tra i quali c'è un altro Panel, che a sua volta contiene, come sua "Figlia", una DrawingArea.

Useremo tale Oggetto DrawingArea (che, come si è descritto, è uno degli Oggetti grafici che compongono l'Oggetto grafico MediaView ) per mostrare la mappa-tile.

Nel contempo sarà possibile vedere anche un file video oppure ascoltare un file audio, cliccando sul tastino di avvio, posto in basso a sinistra dell'Oggetto MediaView. In caso di visualizzazione di un Video o avvio di un file audio, la mappa-tile sarà coperta dal video o - nel caso del file audio - da uno sfondo scuro. Cliccando però sul tastino di arresto del MediaView, si tornerà a visualizzare la mappa.

Esempio pratico (ovviamente è necessario attivare i Componenti "gb.map", "gb.media" e "gb.media.form") [nota 1]:

Private MediaView1 As MediaView
Private DrawingArea1 As DrawingArea
Private mappa As Map
Private mp As New MapPoint(41.8902, 12.4923)
Private mx As Integer
Private my As Integer
Private pt As New Point
Private cpx As New Point
Private c As Short


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": "979"]).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
 MediaView1 = New MediaView(Me) As "MediaView1"

End


Public Sub Form_Open()

 Dim med As Object
 Dim pn, pn1 As Panel
 
 With MediaView1
   .URL = Media.URL("/percorso/del/file/multimediale")
' Ottiene il primo "Figlio" dell'Oggetto "MediaView", che è un "MediaPlayer":
   med = .Children[0]
   Print Object.Type(med)
 End With 
' Ottiene il primo "Figlio" dell'Oggetto "MediaPlayer", che è un "Panel":
 pn = med.Children[0]
 Print Object.Type(pn)
' Ottiene il primo "Figlio" dell'Oggetto "Panel", che è a sua volta un "Panel":
 pn1 = pn.Children[0]
 Print Object.Type(pn1)
' Ottiene il primo "Figlio" dell'Oggetto "Panel", che è una "DrawingArea":
 DrawingArea1 = pn1.Children[0]
 Print Object.Type(pn1.Children[0])

' Se durante l'esecuzione di un file audio si vuole vedere contestualmente anche la mappa, allora bisogna assegnare alla superficie di fondo della "DrawingArea" il valore della trasparenza. In tal caso, però, non sarà possibile spostare la mappa con il mouse. Ciò tornerà ad essere possibile, arrestando l'esecuzione dell'audio cliccando sul tastino dello "STOP" del "MediaView" in basso a sinistra.
' DrawingArea1.Background = Color.Transparent

' Assegna la "DrawingArea" ad un Gruppo di Eventi:
 Object.Attach(DrawingArea1, Me, "DrawingArea1")
 
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:
 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_" & CStr(c) & ".png", 100)
   Inc c
 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()

' Impedisce che si vada oltre il massimo livello di zoom della mappa:
 If mappa.Zoom + Mouse.Delta > mappa.MaxZoom Then Return 

' 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 e modifica lo zoom della mappa:
 mappa.Zoom += Mouse.Delta
 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": "979"].