Non so, utilizzando il componente
gb.map, come si possa "
estrarre" la mappa da far mostrare poi nella "
DrawingArea".
Una possibilità alternativa si può provare utilizzando l'oggetto
WebView. Da quel che si può constatare, osservando il codice HTML di una pagina che mostra una mappa di
OpenStreet, tale mappa è formata da più immagini che rappresentano una porzione di territorio (mostrata appunto nella mappa).
Pertanto, si potrebbe pensare di scaricare le immagini che mostrano la porzione di territorio mostrata, che ci interessa, e di ricomporle - come fosse un
puzzle - in un'unica immagine.
Mostro un esempio pratico di quanto proposto.
E' necessario:
* attivare i seguenti componenti:
gb.qt4.webkit,
gb.net e
gb.net.curl;
* porre sul
Form i seguenti oggetti: un
WebView, due
Button .
Un possibile codice sarebbe il seguente:
Private im As Image
Private myhttp As New HttpClient As "myhttp"
Private stringa As String
Private ind As New String[]
Private n As Byte
Private we As WebElement
Public Sub Form_Open()
Button1.Text = "Estrai\nimmagini"
Button1.Enabled = False
Button2.Text = "Cancella immagini\nscaricate"
Button2.Enabled = False
im = New Image(WebView1.W, WebView1.H)
WebView1.Url = "http://www.openstreetmap.org/#map=5/41.656/14.150"
End
Public Sub WebView1_Load()
Print "Per avviare la procedura di estrazione delle immagini,\ncliccare sulla mappa.\n"
End
Public Sub WebView1_MouseUp()
Dim wf As New WebFrame
n = 0
ind.Clear()
wf = WebView1.Frame
we = wf.Document
Print WebView1.Frame.Url
Print "\nPremere sul tasto "; Quote("Estrai immagini"); "."
Button1.Enabled = True
End
Public Sub Button1_Click()
Dim i1, i2 As Integer
Dim s2 As String
Dim s As String = we.HTML
While True
i1 = InStr(s, ".tile.openstreetmap.org/")
If i1 < 10 Then Break
s2 = Mid(s, i1 - 8, 64)
i2 = InStr(s2, "\"><")
ind.Add(Replace(Left(s2, i2 - 1), "\"", Null))
ind.Sort()
s = Mid(s, i1 + i2, RInStr(s, ".png"))
Wend
Print "\nLa mappa è costituita da num. "; ind.Count; " immagini.\n"
Scarica()
End
Private Procedure Scarica()
If ind.Count = 0 Then Return
Print ind[n], n + 1
' Invia_richiesta al server per scaricare il file immagine:
myhttp.URL = ind[n]
myhttp.Timeout = 15
myhttp.Get()
End
Public Sub myhttp_Read()
Dim sBuf As String
' Andiamo a leggere il flusso di dati del file immagine:
If Lof(MyHTTP) Then
Read #MyHTTP, sBuf, Lof(MyHTTP)
stringa = stringa & sBuf
End If
End
Public Sub MyHTTP_Finished()
Print "Immagine scaricata !"
Wait
MyHTTP.Close
' Ricreiamo il file in una cartella:
File.Save("/tmp" &/ Replace(Right(ind[n], 13), "/", "_"), stringa)
stringa = Null
If n = ind.Max Then
n = 0
ind.Clear()
Button2.Enabled = True
Else
Inc n
Scarica()
Endif
End
Public Sub Button2_Click() ' Consente di cancellare dalla cartella le immagini che sono state scaricate
Dim s As String
For Each s In Dir("/tmp", "*.png", gb.File)
Kill "/tmp" &/ s
Next
End
Tale codice dovrebbe aiutarti
a scaricare le immagini che compongono la mappa che stai osservando nell'oggetto
WebView. Dovrai, come già detto, con successivo codice rigenerare in un'unica immagine la mappa completa mediante le immagini scaricate. Dopo di che potrai agevolmente con le Classi
Paint o
Draw disegnare i cerchi sulla immagine che ricrea la mappa.