Scalare la dimensione della mappa in una Mapview
Premessa
E' opportuno ricordare che il Controllo MapView è formato da un Oggetto "Figlio" Panel, il quale è a sua volta ha un Oggetto "Figlio" che è una DrawingArea:
MapView ⬇ genitore di un Panel ⬇ genitore di una DrawingArea
Ingrandire o rimpicciolire l'immagine di una mappa mostrata in una MapView
Per ottenere diverse dimensioni visuali della mappa, si utilizza, come è noto, la Proprietà ".Zoom" della Classe Map del Componente gb.map.
Tale Proprietà mostra le tessere della mappa corrispondenti ad un livello di zoom, ossia create con quello specifico livello di zoom di immagine rappresentata.
Stante impostato un livello di zoom, è possibile agire sull'immagine della mappa mostrata modificandone la dimensione, ingrandendo i rimpicciolendo l'immagine dell'intera mappa (come se si applicasse un ulteriore zoom al livello di zoom corrente, al quale la mappa è mostrata).
Ovviamente la qualità - soprattutto ingrandendo l'immagine - tenderà a perdere definizione.
Per procedere a tale variazione della dimensione dell'immagine della mappa mostrata, si utilizzerà il Metodo ".Scale()" della CLasse Paint, da applicarsi alla DrawingArea, "Figlia" del Controllo Panel a sua volta "Figlio" della MapView.
Mostriamo un esempio pratico, nel quale cliccando con il tasto destro del mouse si avrà un aumento della dimensione dell'immagine della mappa, cliccando con il tasto centrale, si avrà invece una diminuizione di quella dimensione. Se si mantiene premuto su uno dei due tasti citati, si otterrà un aumento o una diminuizione graduale, ma continua, dell'immagine.
Private MapView1 As MapView Private DrawingArea1 As DrawingArea Private s As Single = 1.0 Public bo As Boolean Public Sub _new() Dim mp As New MapPoint(41.89018, 12.49230) With Me .W = Screen.AvailableWidth .H = Screen.AvailableHeight .Arrangement = Arrange.Fill End With With MapView1 = New MapView(Me) As "MapView1" .Map.AddTile("GoogleMap", "https://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}") .Map.Zoom = 15 .Map.Center = mp End With End Public Sub Form_Open() Dim pn As Panel pn = MapView1.Children[0] DrawingArea1 = pn.Children[0] End Public Sub MapView1_Draw() With Paint .Begin(DrawingArea1) .Translate(Me.W / 2, Me.H / 2) .Scale(s, s) With MapView1.Map .Width = Paint.W .Height = Paint.H Paint.Translate(-(.Width / 2), -(.Height / 2)) .Draw() End With .End End With Me.Refresh() End Public Sub MapView1_MouseDown() bo = False Repeat If Mouse.Middle Then s -= 0.01 If Mouse.Right Then s += 0.01 MapView1.Refresh Wait 0.01 Until bo == True End Public Sub MapView1_MouseUp() bo = True End
Se modifichiamo, come segue:
.Translate(Me.W - 200, 100)
la riga presente immediatamente dopo ".Begin(DrawingArea1)", riducendo la dimensione dellimmagine della mappa, si otterrà una sorta di finestra in alto a destra, mostrandosi al di sotto comunque inalterata l'immagine originaria della mappa.
La finestra in alto a destra avrà, sì, una dimensione scalata ridotta, ma nel contempo mostrerà un'area più ampia di quella visibile sottostante inalterata originaria.
Spostando una delle due mappe mostrate, muovendo il puntatore del mouse mentre si tiene cliccato il tasto sinistro, si procurerà lo spostamento anche dell'altra mappa visualizzata.