Verificare le tessere dei livelli delle Map tiles
Le "Map tiles", che si usano sul web, sono formate, per ciascun livello di zoom, da molteplici tessere (tiles) che insieme offrono la rappresentazione corrente della mappa.
Il seguente semplice codice esemplificativo consente di vedere ogni singola tessera utilizzata da Google Maps usata nel livello di zoom prescelto.
E' necessario attivare il Componente grafico che rende disponibile la Classe "WebView", come ad esempio gb.qt5.webkit (quindi non gb.map).
(La tessera di partenza mostra la foce del fiume Tevere ad un livello di zoom = 12).
Per vedere le tessere contigue a quella corrente visibile (quindi per spostarsi sul territorio), è necessario modificare i valori dei parametri x e y delle tiles, variandoli direttamente dagli SpinBox laterali, oppure cliccando sulle parti visibili di colore arancione del Panel, come segue: se si clicca sulla parte sinistra, sarà mostrata la tessera contigua a sinistra della tessera corrente; se si clicca sulla parte superiore, sarà mostrata la tessera contigua al di sopra della tessera corrente; e così via per le restanti due parti del Panel arancione.
Private WebView1 As WebView Private Panel1 As Panel Private SpinBox1 As SpinBox Private SpinBox2 As SpinBox Private SpinBox3 As SpinBox Private pn2 As Panel Private eti As Label Private zm As Byte Public Sub Form_Open() With Me .Center .W = 580 .H = 500 .X = (Screen.AvailableWidth / 2) - (Me.W / 2) .Y = Screen.AvailableHeight * 0.1 End With With Panel1 = New Panel(Me) As "Panel1" .X = 100 .Y = 50 .W = 350 .H = 350 .Background = Color.Orange End With With eti = New Label(Me) .X = Panel1.X .Y = Panel1.Y + Panel1.H .W = Panel1.W .H = 20 .Alignment = Align.Center End With With SpinBox1 = New SpinBox(Me) As "SpinBox1" .X = Me.W * 0.82 .Y = Me.H * 0.5 .W = 80 .H = 35 .MaxValue = 10000000 End With With SpinBox2 = New SpinBox(Me) As "SpinBox2" .X = Me.W * 0.82 .Y = Me.H * 0.6 .W = 80 .H = 35 .MaxValue = 10000000 End With With SpinBox3 = New SpinBox(Me) As "SpinBox3" .X = Me.W * 0.82 .Y = Me.H * 0.7 .W = 80 .H = 35 .Value = 12 .MaxValue = 24 .MinValue = 1 End With With SpinBox1 .MinValue = 1 .Value = 2187 End With With SpinBox2 .MinValue = 1 .Value = 1524 End With zm = SpinBox3.Value End Public Sub SpinBox1_Change() Ricarica() End Public Sub SpinBox2_Change() Ricarica() End Public Sub SpinBox3_Change() If SpinBox3.Value > zm Then SpinBox1.Value *= 2 SpinBox2.Value *= 2 Endif If SpinBox3.Value < zm Then SpinBox1.Value \= 2 SpinBox2.Value \= 2 Endif zm = SpinBox3.Value eti.Text = "Se l'immagine non è visibile, cliccare sul riquadro bianco." Ricarica() End Public Sub Panel1_MouseUp() If Mouse.X < WebView1.X Then SpinBox1.Value -= 1 If Mouse.X > (WebView1.X + WebView1.W) Then SpinBox1.Value += 1 If Mouse.Y < WebView1.Y Then SpinBox2.Value -= 1 If Mouse.Y > (WebView1.Y + WebView1.H) Then SpinBox2.Value += 1 Object.Lock(pn2) eti.Text = Null End Public Sub Panel2_MouseUp() Ricarica() Object.Lock(pn2) eti.Text = Null End Private Procedure Ricarica() If Object.IsValid(WebView1) Then WebView1.Delete With WebView1 = New WebView(Panel1) As "WebView1" .X = 50 .Y = 50 .W = 256 .H = 256 .Url = "https://mt1.google.com/vt/lyrs=s&x=" & CStr(SpinBox1.Value) & "&y=" & CStr(SpinBox2.Value) & "&z=" & CStr(SpinBox3.Value) End With With pn2 = New Panel(Panel1) As "Panel2" .X = WebView1.X .Y = WebView1.Y .W = WebView1.W .H = WebView1.H .Background = Color.Transparent End With End
Ora con un semplice codice proviamo a mostrare insieme tre tessere orizzontalmente contigue (è necessario attivare i Componenti gb.net e gb.net.curl):
Public Sub Form_Open() Dim tp As New HttpClient Dim ss As New String[] Dim iimm As New Image[] Dim img, im As Image Dim b As Byte Dim PictureBox1 As PictureBox ' Scarica tre immagini-tessere: ss.Push(tp.Download("https://mt1.google.com/vt/lyrs=s&x=2187&y=1524&z=12")) ss.Push(tp.Download("https://mt1.google.com/vt/lyrs=s&x=2188&y=1524&z=12")) ss.Push(tp.Download("https://mt1.google.com/vt/lyrs=s&x=2189&y=1524&z=12")) tp.Close im = New Image For b = 0 To ss.Max iimm.Push(im.FromString(ss[b])) Next img = New Image(iimm[0].W * iimm.Count, iimm[0].H) With Me .Center .W = img.W + 50 .H = img.H + 50 End With For b = 0 To ss.Max With Paint .Begin(img) .DrawImage(iimm[b], b * iimm[0].W, 0, iimm[0].W, iimm[0].H) .End End With Next With PictureBox1 = New PictureBox(Me) .X = 20 .Y = 20 .W = img.W .H = img.H .Image = img End With End