Ottenere un'Image dalla mappa mostrata da una MapView
Da Gambas-it.org - Wikipedia.
Versione del 20 mag 2023 alle 16:34 di Vuott (Discussione | contributi)
Per ottenere un oggetto Image, e da questo quindi un file immagine, della mappa corrente mostrata da una MapView, è possibile adottare due modalità.
Uso del Metodo MapView.Map.Draw()
Mostriamo un esempio pratico:
Private MapView1 As MapView Public Sub Form_Open() Dim Button1 As Button Dim mp As New MapPoint ' Specifica le coordinate geografiche del centro della mappa alla sua apertura iniziale: mp.Lat = 41.8902142 mp.Lon = 12.4900422 With Me .W = Screen.AvailableWidth .H = Screen.AvailableHeight End With With MapView1 = New MapView(Me) As "MapView1" .W = Me.W * 0.95 .H = Me.H ' Imposta un "Raster Tiles Server" remoto: .Map.AddTile("opentopo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png") .Map.Zoom = 16 ' Imposta il centro della mappa visualizzata all'inizio: .Map.Center = mp End With With Button1 = New Button(Me) As "Button1" .W = Me.W * 0.04 .H = Me.H * 0.1 .X = Me.W * 0.95 .Y = Me.H * 0.5 .Background = Color.Red End With End Public Sub Button1_Click() Dim im As New Image(MapView1.W, MapView1.H, Color.White, Image.Standard) With Paint .Begin(im) MapView1.Map.Draw() .End End With im.Save("/tmp/prova.png", 100) End
Se si desidera che il file immagine venga creato automaticamente ad ogni rinnovo del disegno della mappa, allora si utilizzerà l'Evento "_Draw()" della Classe "MapView" al posto dell'Evento "Button1_Click()".
Uso del Metodo MapView.Map.Grab()
Di seguito mostriamo un semplice esempio:
Private MapView1 As MapView Public Sub Form_Open() Dim Button1 As Button Dim mp As New MapPoint ' Specifica le coordinate geografiche del centro della mappa alla sua apertura iniziale: mp.Lat = 41.8902142 mp.Lon = 12.4900422 With Me .W = Screen.AvailableWidth .H = Screen.AvailableHeight End With With MapView1 = New MapView(Me) As "MapView1" .W = Me.W * 0.95 .H = Me.H ' Imposta un "Raster Tiles Server" remoto: .Map.AddTile("opentopo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png") .Map.Zoom = 16 ' Imposta il centro della mappa visualizzata all'inizio: .Map.Center = mp End With With Button1 = New Button(Me) As "Button1" .W = Me.W * 0.04 .H = Me.H * 0.1 .X = Me.W * 0.95 .Y = Me.H * 0.5 .Background = Color.Red End With End Public Sub Button1_Click() Dim im As New Image(MapView1.W, MapView1.H, Color.White, Image.Standard) ' Carica nell'oggetto "Image" i dati dell'immagine della mappa mostrata dalla "MapView": With MapView1 im = .Map.Grab(.Map.GetTile("opentopo").MaxBounds(.Map.Center, .Map.Center), .W, .H, 0, .Map.Zoom) End With im.Save("/tmp/prova.png", 100) End