Differenze tra le versioni di "Verificare le tessere dei livelli delle Map tiles"

Da Gambas-it.org - Wikipedia.
Riga 4: Riga 4:
 
<BR>E' necessario attivare il Componente grafico che rende disponibile la Classe "''WebView''", come ad esempio gb.qt5.webkit (quindi non gb.map).
 
<BR>E' necessario attivare il Componente grafico che rende disponibile la Classe "''WebView''", come ad esempio gb.qt5.webkit (quindi non gb.map).
 
<BR>(La tessera di partenza mostra la foce del fiume Tevere ad un livello di zoom = 12).
 
<BR>(La tessera di partenza mostra la foce del fiume Tevere ad un livello di zoom = 12).
<BR>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.
+
<BR>Per vedere le tessere contigue a quella corrente visibile (quindi per spostarsi sul territorio), è necessario modificare i valori dei parametri x e y delle ''tile'', che potranno essere variati cliccando sulle parti visibili di colore arancione del "Panel" di contorno al "WebView", 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.
 +
<BR>Per modificare lo zoom della mappa, ruotare la rotellina del mouse al di sopra dell'oggetto "WebView".
 
  Private WebView1 As WebView
 
  Private WebView1 As WebView
 
  Private Panel1 As Panel
 
  Private Panel1 As Panel
  Private SpinBox1 As SpinBox
+
  Private Label1 As Label
  Private SpinBox2 As SpinBox
+
  Private Label2 As Label
  Private SpinBox3 As SpinBox
+
  Private Label3 As Label
  Private pn2 As Panel
+
  Private x As Integer = 2187  ' Indica lo spostamento Nord-Sud
  Private eti As Label
+
  Private y As Integer = 1524  ' Indica lo spostamento Ovest-Est
  Private zm As Byte
+
  Private z As Byte = 12        ' Indica lo Zoom della mappa
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  '''Public''' Sub _new()
 
    
 
    
 
   With Me
 
   With Me
Riga 21: Riga 22:
 
     .W = 580
 
     .W = 580
 
     .H = 500
 
     .H = 500
    .X = (Screen.AvailableWidth / 2) - (Me.W / 2)
 
    .Y = Screen.AvailableHeight * 0.1
 
 
   End With
 
   End With
 
   With Panel1 = New Panel(Me) As "Panel1"
 
   With Panel1 = New Panel(Me) As "Panel1"
Riga 31: Riga 30:
 
     .Background = Color.Orange
 
     .Background = Color.Orange
 
   End With
 
   End With
   With eti = New Label(Me)
+
   With Label1 = New Label(Me)
     .X = Panel1.X
+
     .X = Me.W * 0.82
     .Y = Panel1.Y + Panel1.H
+
     .Y = Me.H * 0.3
     .W = Panel1.W
+
    .Alignment = Align.Right
 +
     .W = .Font.TextWidth(.Text)
 
     .H = 20
 
     .H = 20
    .Alignment = Align.Center
 
 
   End With
 
   End With
   With SpinBox1 = New SpinBox(Me) As "SpinBox1"
+
   With Label2 = New Label(Me)
 
     .X = Me.W * 0.82
 
     .X = Me.W * 0.82
     .Y = Me.H * 0.5
+
     .Y = Label1.Y + Label1.H + 10
     .W = 80
+
     .Alignment = Align.Right
     .H = 35
+
     .W = .Font.TextWidth(.Text)
     .MaxValue = 10000000
+
     .H = 20
 
   End With
 
   End With
   With SpinBox2 = New SpinBox(Me) As "SpinBox2"
+
   With Label3 = New Label(Me)
 
     .X = Me.W * 0.82
 
     .X = Me.W * 0.82
     .Y = Me.H * 0.6
+
     .Y = Label2.Y + Label2.H + 10
     .W = 80
+
     .Alignment = Align.Right
    .H = 35
+
     .W = .Font.TextWidth(.Text)
    .MaxValue = 10000000
+
     .H = 20
  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
 
   End With
 
    
 
    
  With SpinBox1
+
'''End'''
    .MinValue = 1
+
    .Value = 2187
+
'''Public''' Sub Form_Open()
  End With
 
  With SpinBox2
 
    .MinValue = 1
 
    .Value = 1524
 
  End With
 
 
    
 
    
   zm = SpinBox3.Value
+
   AggiornaLabel()
 
 
'''End'''
 
 
'''Public''' Sub SpinBox1_Change()
 
 
    
 
    
 
   Ricarica()
 
   Ricarica()
 
+
 
 
  '''End'''
 
  '''End'''
 
   
 
   
'''Public''' Sub SpinBox2_Change()
 
 
 
  Ricarica()
 
 
 
'''End'''
 
 
   
 
   
  '''Public''' Sub SpinBox3_Change()
+
  '''Public''' Sub WebView1_MouseWheel()
 
    
 
    
   If SpinBox3.Value > zm Then
+
   Select Case Mouse.Delta
    SpinBox1.Value *= 2
+
    Case 1
    SpinBox2.Value *= 2
+
      If z == 22 Then Return
  Endif
+
      x *= 2
  If SpinBox3.Value < zm Then
+
      y *= 2
    SpinBox1.Value \= 2
+
      z += 1
    SpinBox2.Value \= 2
+
    Case -1
   Endif
+
      If z == 0 Then Return
 +
      x \= 2
 +
      y \= 2
 +
      z -= 1
 +
   End Select
 
    
 
    
   zm = SpinBox3.Value
+
   AggiornaLabel()
 
    
 
    
   eti.Text = "Se l'immagine non è visibile, cliccare sul riquadro bianco."
+
   Ricarica()
 
    
 
    
  Ricarica()
 
 
 
 
  '''End'''
 
  '''End'''
 +
 
   
 
   
 
  '''Public''' Sub Panel1_MouseUp()
 
  '''Public''' Sub Panel1_MouseUp()
 
    
 
    
   If Mouse.X < WebView1.X Then SpinBox1.Value -= 1
+
   If Mouse.X < WebView1.X Then x -= 1
 +
  If Mouse.X > (WebView1.X + WebView1.W) Then x += 1
 
    
 
    
   If Mouse.X > (WebView1.X + WebView1.W) Then SpinBox1.Value += 1
+
   If Mouse.Y < WebView1.Y Then y -= 1
 +
  If Mouse.Y > (WebView1.Y + WebView1.H) Then y += 1
 
    
 
    
   If Mouse.Y < WebView1.Y Then SpinBox2.Value -= 1
+
   AggiornaLabel()
 
    
 
    
   If Mouse.Y > (WebView1.Y + WebView1.H) Then SpinBox2.Value += 1
+
   Ricarica()
  Object.Lock(pn2)
 
  eti.Text = Null
 
 
    
 
    
 
  '''End'''
 
  '''End'''
 
   
 
   
  '''Public''' Sub Panel2_MouseUp()
+
  '''Private''' Procedure AggiornaLabel()
 
 
  Ricarica()
 
 
    
 
    
   Object.Lock(pn2)
+
   Label1.Text = "x = " & Format(x, "########")
   eti.Text = Null
+
  Label1.W = Label1.Font.TextWidth(Label1.Text)
 +
  Label2.Text = "y = " & Format(y, "########")
 +
  Label2.W = Label2.Font.TextWidth(Label2.Text)
 +
   Label3.Text = "z = " & Format(z, "########")
 +
  Label3.W = Label3.Font.TextWidth(Label3.Text)
 
    
 
    
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Private''' Procedure Ricarica()
 
  '''Private''' Procedure Ricarica()
 
    
 
    
 
   If Object.IsValid(WebView1) Then WebView1.Delete
 
   If Object.IsValid(WebView1) Then WebView1.Delete
 +
 
 
   With WebView1 = New WebView(Panel1) As "WebView1"
 
   With WebView1 = New WebView(Panel1) As "WebView1"
 
     .X = 50
 
     .X = 50
Riga 138: Riga 119:
 
     .W = 256
 
     .W = 256
 
     .H = 256
 
     .H = 256
     .Url = "https&#058;//mt1.google.com/vt/lyrs=s&x=" & CStr(SpinBox1.Value) & "&y=" & CStr(SpinBox2.Value) & "&z=" & CStr(SpinBox3.Value)
+
     .Url = "https://mt1.google.com/vt/lyrs=s&x=" & CStr(x) & "&y=" & CStr(y) & "&z=" & CStr(z)
  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 With
 
    
 
    
 
  '''End'''
 
  '''End'''
 +
 +
 
Ora con un semplice codice proviamo a mostrare insieme tre tessere orizzontalmente contigue (è necessario attivare i Componenti ''gb.net'' e ''gb.net.curl''):
 
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()
 
  '''Public''' Sub Form_Open()

Versione delle 20:57, 30 apr 2021

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 tile, che potranno essere variati cliccando sulle parti visibili di colore arancione del "Panel" di contorno al "WebView", 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.
Per modificare lo zoom della mappa, ruotare la rotellina del mouse al di sopra dell'oggetto "WebView".

Private WebView1 As WebView
Private Panel1 As Panel
Private Label1 As Label
Private Label2 As Label
Private Label3 As Label
Private x As Integer = 2187   ' Indica lo spostamento Nord-Sud
Private y As Integer = 1524   ' Indica lo spostamento Ovest-Est
Private z As Byte = 12        ' Indica lo Zoom della mappa


Public Sub _new()
 
 With Me
   .Center
   .W = 580
   .H = 500
 End With
 With Panel1 = New Panel(Me) As "Panel1"
   .X = 100
   .Y = 50
   .W = 350
   .H = 350
   .Background = Color.Orange
 End With
 With Label1 = New Label(Me)
   .X = Me.W * 0.82
   .Y = Me.H * 0.3
   .Alignment = Align.Right
   .W = .Font.TextWidth(.Text)
   .H = 20
 End With
 With Label2 = New Label(Me)
   .X = Me.W * 0.82
   .Y = Label1.Y + Label1.H + 10
   .Alignment = Align.Right
   .W = .Font.TextWidth(.Text)
   .H = 20
 End With
 With Label3 = New Label(Me)
   .X = Me.W * 0.82
   .Y = Label2.Y + Label2.H + 10
   .Alignment = Align.Right
   .W = .Font.TextWidth(.Text)
   .H = 20
 End With
 
End 

Public Sub Form_Open()
 
 AggiornaLabel()
 
 Ricarica()
 
End


Public Sub WebView1_MouseWheel()
 
 Select Case Mouse.Delta
   Case 1
     If z == 22 Then Return 
     x *= 2
     y *= 2
     z += 1
   Case -1
     If z == 0 Then Return 
     x \= 2
     y \= 2
     z -= 1
 End Select
 
 AggiornaLabel()
 
 Ricarica()
 
End


Public Sub Panel1_MouseUp()
 
 If Mouse.X < WebView1.X Then x -= 1
 If Mouse.X > (WebView1.X + WebView1.W) Then x += 1
 
 If Mouse.Y < WebView1.Y Then y -= 1
 If Mouse.Y > (WebView1.Y + WebView1.H) Then y += 1
 
 AggiornaLabel()
 
 Ricarica()
 
End

Private Procedure AggiornaLabel()
 
 Label1.Text = "x = " & Format(x, "########")
 Label1.W = Label1.Font.TextWidth(Label1.Text)
 Label2.Text = "y = " & Format(y, "########")
 Label2.W = Label2.Font.TextWidth(Label2.Text)
 Label3.Text = "z = " & Format(z, "########")
 Label3.W = Label3.Font.TextWidth(Label3.Text)
 
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(x) & "&y=" & CStr(y) & "&z=" & CStr(z)
 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