Bing map - inserire icona personalizzata invece dei pushpin standard

di il
15 risposte

Bing map - inserire icona personalizzata invece dei pushpin standard

Chi sa se si puo fare?

inserire icona personalizzata invece dei pushpin standard

15 Risposte

  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Lo vuoi fare con VB6?
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Rubik ha scritto:


    Lo vuoi fare con VB6?
    si in vb6.
    uso questa stringa/url:



    in pushpin sono il 3 e il 9, e vorrei sostituirli con due icone personalizzate.
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Le immagini vengono inserite attingendo al database dal server, al quale puoi dire di usare una di quelle a disposizione tramite l'indice, le hai viste tutte?
    questa è la 40:

    la 66:
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Rubik ha scritto:


    Le immagini vengono inserite attingendo al database dal server, al quale puoi dire di usare una di quelle a disposizione tramite l'indice, le hai viste tutte?
    questa è la 40:

    la 66:
    Ti ringrazio per le info.

    ma io una volta scaricata l'immagine la inserisco in un picturebox2 in picture2.

    ora dovrei fare in modo che con l'evento mouse_move passando su una delle due icone faccio partire un altro codice con una call.
    il problema è che le icone di bing map sono con gradienti di colore e non solido, quindi non esiste un colore fisso che posso intercettare.

    qualcuno mi ma suggerito di far partire questo url dove si possono avere le coordinate delle icone sull'immagine in base alla risoluzione scelta nella url (vedi anchor) e bottomRightOffset e topLeftOffset X, Y:



    ma in effetti per me è un pò complicato capire come si possa interagire con il mouse_move, e le coordinate restituite.

    Se vuoi ti mando il progetto completo.

    Credo di essere stato chiaro, o no?
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Dovresti fare la domanda giusta, cos'è che non sai fare?
    Ricavare le coordinate del mouse mentre è sulla PictureBox da VB6?
    Sapere in quali coordinate sono le icone sulla bitmap restituita, indipendentemente dal linguaggio?
    Come estrarre le coordinate delle icone dal codice HTML restituito dal link che hai postato?
    Ricavare un colore da una bitmap contenuta in una PictureBox in una posizione specifica del mouse in VB6?
    Al passaggio del mouse? al click?
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Rubik ha scritto:



    Dovresti fare la domanda giusta, cos'è che non sai fare?
    intercettare quando il muse passa su una delle icone
    Ricavare le coordinate del mouse mentre è sulla PictureBox da VB6?
    lo so fare
    Sapere in quali coordinate sono le icone sulla bitmap restituita, indipendentemente dal linguaggio?
    si esattamente questo
    Ricavare un colore da una bitmap contenuta in una PictureBox in una posizione specifica del mouse in VB6?
    lo so fare
    Al passaggio del mouse? al click?
    passaggio del mouse
    ovvero intercettare se al passaggio del mouse su una delle due icone è true, li faccio partire una call and un altra funzione...
    in ogni caso se il colore delle icone è un colore "solido", quello lo so fare...
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Il link con le coordinate restituisce un Json, in VB6 si può caricare in un stringa il Json, poi andare a caccia delle info cercate con instr
    Per interpretare il Json, ti posto un abbozzo di programma che dovrai completare.
    Apri un nuovo progetto EXE VB6, aggiungi sul form una TextBox con la proprietà MultiLine = True, e una ListBox.
    
    Private Declare Function InternetOpen Lib "WININET" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Private Declare Function InternetOpenUrl Lib "WININET" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
    Private Declare Function InternetReadFile Lib "WININET" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
    Private Declare Function InternetCloseHandle Lib "WININET" (ByVal hInet As Long) As Integer
    Private Declare Function DeleteUrlCacheEntry Lib "WININET" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
    
    Private Sub Form_Activate()
        carica_sito ("http://dev.virtualearth.net/REST/v1/Imagery/Map/Road/Routes?wp.0=37,3990,13,6197;3;ARAGONA&wp.1=41,0000,16,8833;9;ADELFIA%20CANNETO&mapsize=640,480&C=IT&mapMetadata=1&key=Ap94-koskdt-HryTYKhaJf5GLnuzjt3uLkl5AyKQnIYw6m6QPmiDIxJSWW_1AJ_1")
    End Sub
    
    Public Sub carica_sito(url)
      
        Dim hOpen               As Long
        Dim hOpenUrl            As Long
        Dim sURL                As String
        Dim bDoLoop             As Boolean
        Dim bRet                As Boolean
        Dim sReadBuffer         As String * 2048
        Dim lNumberOfBytesRead  As Long
        sBuffer = ""
        sURL = url
        hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
        hOpenUrl = InternetOpenUrl(hOpen, sURL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
        bDoLoop = True
        While bDoLoop
            DoEvents
            sReadBuffer = vbNullString
            bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
            sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
            If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
        Wend
        If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
        If hOpen <> 0 Then InternetCloseHandle (hOpen)
        Text1.Text = sBuffer
        Call Interpreta(CStr(sBuffer))
        
    End Sub
        
    Private Sub Interpreta(json As String)
    
        Dim pos1 As Long
        Dim pos2 As Long
     
        pos1 = 1
       
        pos1 = InStr(pos1, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate1: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
        
        pos1 = InStr(pos2, json, "pushpin", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "}", vbTextCompare)
        List1.AddItem ("pushpin1: " & Mid(json, pos1 + 22, pos2 - pos1 - 22))
        
        pos1 = InStr(pos2, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate2: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
    
    End Sub
    

    VB6_Json.jpg
    VB6_Json.jpg

  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Rubik ha scritto:


    Il link con le coordinate restituisce un Json, in VB6 si può caricare in un stringa il Json, poi andare a caccia delle info cercate con instr
    Per interpretare il Json, ti posto un abbozzo di programma che dovrai completare.
    Apri un nuovo progetto EXE VB6, aggiungi sul form una TextBox con la proprietà MultiLine = True, e una ListBox.
    
    Private Declare Function InternetOpen Lib "WININET" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Private Declare Function InternetOpenUrl Lib "WININET" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
    Private Declare Function InternetReadFile Lib "WININET" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
    Private Declare Function InternetCloseHandle Lib "WININET" (ByVal hInet As Long) As Integer
    Private Declare Function DeleteUrlCacheEntry Lib "WININET" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
    
    Private Sub Form_Activate()
        carica_sito ("http://dev.virtualearth.net/REST/v1/Imagery/Map/Road/Routes?wp.0=37,3990,13,6197;3;ARAGONA&wp.1=41,0000,16,8833;9;ADELFIA%20CANNETO&mapsize=640,480&C=IT&mapMetadata=1&key=Ap94-koskdt-HryTYKhaJf5GLnuzjt3uLkl5AyKQnIYw6m6QPmiDIxJSWW_1AJ_1")
    End Sub
    
    Public Sub carica_sito(url)
      
        Dim hOpen               As Long
        Dim hOpenUrl            As Long
        Dim sURL                As String
        Dim bDoLoop             As Boolean
        Dim bRet                As Boolean
        Dim sReadBuffer         As String * 2048
        Dim lNumberOfBytesRead  As Long
        sBuffer = ""
        sURL = url
        hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
        hOpenUrl = InternetOpenUrl(hOpen, sURL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
        bDoLoop = True
        While bDoLoop
            DoEvents
            sReadBuffer = vbNullString
            bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
            sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
            If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
        Wend
        If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
        If hOpen <> 0 Then InternetCloseHandle (hOpen)
        Text1.Text = sBuffer
        Call Interpreta(CStr(sBuffer))
        
    End Sub
        
    Private Sub Interpreta(json As String)
    
        Dim pos1 As Long
        Dim pos2 As Long
     
        pos1 = 1
       
        pos1 = InStr(pos1, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate1: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
        
        pos1 = InStr(pos2, json, "pushpin", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "}", vbTextCompare)
        List1.AddItem ("pushpin1: " & Mid(json, pos1 + 22, pos2 - pos1 - 22))
        
        pos1 = InStr(pos2, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate2: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
    
    End Sub
    
    VB6_Json.jpg
    GRAZIE! Se stato molto paziente e gentile.
    dal tuo esempio ma non vedo il puspin delle coordinate2
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    EDIT:

    Il programma non è volutamente completo.

    Primo link (quello che crea l'immagine di Bing Map con le due località...)
    Secondo link (quello che restituisce il json)

    Per leggere il json ho usato il secondo link che hai inviato, che non mi sembra sia derivato dal primo link
    Il json contiene le 4 coordinate che definiscono gli angoli di una mappa, le ccordinate del centro, la posizione di un pushpin ecc ecc.

    Sicuramente manca un passaggio che crea il secondo link utilizzando i parametri del primo link

    Considera che se si hanno le coordinate dei 4 angoli della bitmap, si possono calcolare al volo tutte le altre coordinate all'interno della mappa rappresentata dalla bitmap, senza appoggiarsi a nessun sito.
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Ok.
    ma se verifico la X e la Y nell'evento mouse_move la X e la Y negli elementi anchor, sono valori completamente differenti...
    per esempio l'icona rossa che coordinate dovrebbe avere?
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Il secondo link ha un pushpin su Aragona e un pushpin su Adelfia, non li puoi sovrapporre alla mappa con Alessandria e Andreatta.
    Non so come hai proceduto per realizzare la prima mappa e non so come hai proceduto per ottenere il secondo link, non ho mai operato con Bing Map.
    Da quel poco che ho visto ora, sembra che microsoft metta a disposizione tutti gli strumenti per ottenere quello che vuoi, non ti saprei aiutare, ma se mi rendi partecipe di come hai operato fin qui, forse ci capisco qualcosa.
    Naturalmente non sto parlando del codice VB6, ma di Bing Map e come operi per ottenere il primo e il secondo link.
    Oppure mandami due link correlati
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Rubik ha scritto:


    Il secondo link ha un pushpin su Aragona e un pushpin su Adelfia, non li puoi sovrapporre alla mappa con Alessandria e Andreatta.
    Non so come hai proceduto per realizzare la prima mappa e non so come hai proceduto per ottenere il secondo link, non ho mai operato con Bing Map.
    Da quel poco che ho visto ora, sembra che microsoft metta a disposizione tutti gli strumenti per ottenere quello che vuoi, non ti saprei aiutare, ma se mi rendi partecipe di come hai operato fin qui, forse ci capisco qualcosa.
    Naturalmente non sto parlando del codice VB6, ma di Bing Map e come operi per ottenere il primo e il secondo link.
    Oppure mandami due link correlati
    Infatti, ho sbagliato, i due link si riferiscono a località diverse:-(
    ora ti invio due nuove località
    spero di essere piu chiaro, Il risultato finale è:

    1) Download della mappa, con l'api rest



    qui invece trovi il link per il metatdata ()

    2) copiarla in una picturebox2, picture2. (questo lo so già fare)

    3) intercettare se il cursore (mousemove) passa su AREZZO, fai una call ad una sub, naturalmente vale lo stesso discorso anche per AGRIGENTO

    questo è tutto.

    io credevo che con l'opzione &mapMetadata=1& nello stesso link, che uso per il dowbnload della mappa, riuscivo ad avere le coordinate in pixel per usarle nell'evento mousemove... magari salvandole in variabili da usare, anche per il seguito del progetto.

    Ti ripeto se vuoi il progetto completo, cosi ti rederai conto, fammi sapere.

    Come ti dicevo conosco il modo per intercettare il colore delle icone (pushpin) , al passaggio del mouse, ma al loro interno ci sono colori sfumati e non solidi...
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Con i link correlati ora le coordinate combaciano al pixel.
    Il codice seguente ti restituisce 4 variabili con le coordinate in pixel di dove si trovano le località, non dove si trova l'icona che è spostata in alto rispetto alla località di 7 pixel come descritto nell'offset, l'offset cambia se cambi l'icona altrimenti è sempre lo stesso.
    
    Private Declare Function InternetOpen Lib "WININET" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Private Declare Function InternetOpenUrl Lib "WININET" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
    Private Declare Function InternetReadFile Lib "WININET" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
    Private Declare Function InternetCloseHandle Lib "WININET" (ByVal hInet As Long) As Integer
    Private Declare Function DeleteUrlCacheEntry Lib "WININET" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
    
    Dim pushpin_0_x As Integer
    Dim pushpin_0_y As Integer
    Dim pushpin_1_x As Integer
    Dim pushpin_1_y As Integer
    
    Private Sub Form_Activate()
        carica_sito ("http://dev.virtualearth.net/REST/v1/Imagery/Map/Road/Routes?wp.0=37,3107,13,5766;3;AGRIGENTO&wp.1=43,4628,11,8807;9;AREZZO&mapsize=640,480&C=IT&mapMetadata=1&format=jpeg&key=Ap94-koskdt-HryTYKhaJf5GLnuzjt3uLkl5AyKQnIYw6m6QPmiDIxJSWW_1AJ_1")
    End Sub
    
    Public Sub carica_sito(url)
      
        Dim hOpen               As Long
        Dim hOpenUrl            As Long
        Dim sURL                As String
        Dim bDoLoop             As Boolean
        Dim bRet                As Boolean
        Dim sReadBuffer         As String * 2048
        Dim lNumberOfBytesRead  As Long
        sBuffer = ""
        sURL = url
        hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
        hOpenUrl = InternetOpenUrl(hOpen, sURL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
        bDoLoop = True
        While bDoLoop
            DoEvents
            sReadBuffer = vbNullString
            bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
            sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
            If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
        Wend
        If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
        If hOpen <> 0 Then InternetCloseHandle (hOpen)
        Text1.Text = sBuffer
        Call Interpreta(CStr(sBuffer))
         
    End Sub
        
    Private Sub Interpreta(json As String)
    
        Dim pos1 As Long
        Dim pos2 As Long
     
        pos1 = 1
       
        pos1 = InStr(pos1, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate centro mappa: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
        
        pos1 = InStr(pos2, json, "pushpin", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "}", vbTextCompare)
       
        Dim pushpin_0 As String
        pushpin_0 = Mid(json, pos1 + 22, pos2 - pos1 - 22)
        List1.AddItem ("pushpin_0: " & pushpin_0)
        
        pos1 = InStr(pos2, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate_0: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
        
        pos1 = InStr(pos2, json, "anchor", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "}", vbTextCompare)
        
        Dim pushpin_1 As String
        pushpin_1 = Mid(json, pos1 + 9, pos2 - pos1 - 9)
        List1.AddItem ("pushpin_1: " & pushpin_1)
        
        pos1 = InStr(pos2, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate_1: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
        
        pos1 = InStr(1, pushpin_0, ":""", vbTextCompare)
        pos2 = InStr(pos1, pushpin_0, """,", vbTextCompare)
        pushpin_0_x = CInt(Mid(pushpin_0, pos1 + 2, pos2 - pos1 - 2))
        List1.AddItem ("pushpin_0_x = " & pushpin_0_x)
        
        pos1 = InStr(pos2 + 2, pushpin_0, ":""", vbTextCompare)
        pos2 = InStr(pos1 + 2, pushpin_0, """", vbTextCompare)
        pushpin_0_y = CInt(Mid(pushpin_0, pos1 + 2, pos2 - pos1 - 2))
        List1.AddItem ("pushpin_0_y = " & pushpin_0_y)
        
        pos1 = InStr(1, pushpin_1, ":""", vbTextCompare)
        pos2 = InStr(pos1, pushpin_1, """,", vbTextCompare)
        pushpin_1_x = CInt(Mid(pushpin_1, pos1 + 2, pos2 - pos1 - 2))
        List1.AddItem ("pushpin_1_x = " & pushpin_1_x)
        
        pos1 = InStr(pos2 + 2, pushpin_1, ":""", vbTextCompare)
        pos2 = InStr(pos1 + 2, pushpin_1, """", vbTextCompare)
        pushpin_1_y = CInt(Mid(pushpin_1, pos1 + 2, pos2 - pos1 - 2))
        List1.AddItem ("pushpin_1_y = " & pushpin_1_y)
    
    End Sub
    

    VB6_Json.jpg
    VB6_Json.jpg

    Metti il Form e la PicturBox, Form1.ScaleMode = 3 e Picture1.ScaleMode = 3 così lavori con le coordinate in pixel.
    Carica la bitmap nella picturebox e imposta le dimensioni della picturebox in accordo con le dimensioni dell'immagine imageHeight":"480","imageWidth":"640"
    ora con:
    
    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Label1.Caption = X & " - " & Y
    End Sub
    
    in X e Y avrai le coordinate che corrispondono con quelle della bitmap, ho messo una label, un test per vedere se hai fatto tutto bene non guasta mai, in alto a sx avrai 0 - 0, in basso a dx avrai 639 - 479.

    all'interno della routine MouseMove dovrai scrivere il codice che verifica quando le coordinate corrispondono a quelle delle variabili che ti ho trovato.
    un range per evitare di dover puntare un singolo pixel è d'obbligo.
  • Re: Bing map - inserire icona personalizzata invece dei pushpin standard

    Rubik ha scritto:


    Con i link correlati ora le coordinate combaciano al pixel.
    Il codice seguente ti restituisce 4 variabili con le coordinate in pixel di dove si trovano le località, non dove si trova l'icona che è spostata in alto rispetto alla località di 7 pixel come descritto nell'offset, l'offset cambia se cambi l'icona altrimenti è sempre lo stesso.
    
    Private Declare Function InternetOpen Lib "WININET" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Private Declare Function InternetOpenUrl Lib "WININET" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
    Private Declare Function InternetReadFile Lib "WININET" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
    Private Declare Function InternetCloseHandle Lib "WININET" (ByVal hInet As Long) As Integer
    Private Declare Function DeleteUrlCacheEntry Lib "WININET" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
    
    Dim pushpin_0_x As Integer
    Dim pushpin_0_y As Integer
    Dim pushpin_1_x As Integer
    Dim pushpin_1_y As Integer
    
    Private Sub Form_Activate()
        carica_sito ("http://dev.virtualearth.net/REST/v1/Imagery/Map/Road/Routes?wp.0=37,3107,13,5766;3;AGRIGENTO&wp.1=43,4628,11,8807;9;AREZZO&mapsize=640,480&C=IT&mapMetadata=1&format=jpeg&key=Ap94-koskdt-HryTYKhaJf5GLnuzjt3uLkl5AyKQnIYw6m6QPmiDIxJSWW_1AJ_1")
    End Sub
    
    Public Sub carica_sito(url)
      
        Dim hOpen               As Long
        Dim hOpenUrl            As Long
        Dim sURL                As String
        Dim bDoLoop             As Boolean
        Dim bRet                As Boolean
        Dim sReadBuffer         As String * 2048
        Dim lNumberOfBytesRead  As Long
        sBuffer = ""
        sURL = url
        hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
        hOpenUrl = InternetOpenUrl(hOpen, sURL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
        bDoLoop = True
        While bDoLoop
            DoEvents
            sReadBuffer = vbNullString
            bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
            sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
            If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
        Wend
        If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
        If hOpen <> 0 Then InternetCloseHandle (hOpen)
        Text1.Text = sBuffer
        Call Interpreta(CStr(sBuffer))
         
    End Sub
        
    Private Sub Interpreta(json As String)
    
        Dim pos1 As Long
        Dim pos2 As Long
     
        pos1 = 1
       
        pos1 = InStr(pos1, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate centro mappa: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
        
        pos1 = InStr(pos2, json, "pushpin", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "}", vbTextCompare)
       
        Dim pushpin_0 As String
        pushpin_0 = Mid(json, pos1 + 22, pos2 - pos1 - 22)
        List1.AddItem ("pushpin_0: " & pushpin_0)
        
        pos1 = InStr(pos2, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate_0: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
        
        pos1 = InStr(pos2, json, "anchor", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "}", vbTextCompare)
        
        Dim pushpin_1 As String
        pushpin_1 = Mid(json, pos1 + 9, pos2 - pos1 - 9)
        List1.AddItem ("pushpin_1: " & pushpin_1)
        
        pos1 = InStr(pos2, json, "coordinates", vbTextCompare)
        pos2 = InStr(pos1 + 1, json, "]", vbTextCompare)
        List1.AddItem ("coordinate_1: " & Mid(json, pos1 + 13, pos2 - pos1 - 12))
        
        pos1 = InStr(1, pushpin_0, ":""", vbTextCompare)
        pos2 = InStr(pos1, pushpin_0, """,", vbTextCompare)
        pushpin_0_x = CInt(Mid(pushpin_0, pos1 + 2, pos2 - pos1 - 2))
        List1.AddItem ("pushpin_0_x = " & pushpin_0_x)
        
        pos1 = InStr(pos2 + 2, pushpin_0, ":""", vbTextCompare)
        pos2 = InStr(pos1 + 2, pushpin_0, """", vbTextCompare)
        pushpin_0_y = CInt(Mid(pushpin_0, pos1 + 2, pos2 - pos1 - 2))
        List1.AddItem ("pushpin_0_y = " & pushpin_0_y)
        
        pos1 = InStr(1, pushpin_1, ":""", vbTextCompare)
        pos2 = InStr(pos1, pushpin_1, """,", vbTextCompare)
        pushpin_1_x = CInt(Mid(pushpin_1, pos1 + 2, pos2 - pos1 - 2))
        List1.AddItem ("pushpin_1_x = " & pushpin_1_x)
        
        pos1 = InStr(pos2 + 2, pushpin_1, ":""", vbTextCompare)
        pos2 = InStr(pos1 + 2, pushpin_1, """", vbTextCompare)
        pushpin_1_y = CInt(Mid(pushpin_1, pos1 + 2, pos2 - pos1 - 2))
        List1.AddItem ("pushpin_1_y = " & pushpin_1_y)
    
    End Sub
    
    VB6_Json.jpg
    Metti il Form e la PicturBox, Form1.ScaleMode = 3 e Picture1.ScaleMode = 3 così lavori con le coordinate in pixel.
    Carica la bitmap nella picturebox e imposta le dimensioni della picturebox in accordo con le dimensioni dell'immagine imageHeight":"480","imageWidth":"640"
    ora con:
    
    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Label1.Caption = X & " - " & Y
    End Sub
    
    in X e Y avrai le coordinate che corrispondono con quelle della bitmap, ho messo una label, un test per vedere che hai fatto tutto bene non guasta mai, in alto a sx avrai 0 - 0, in basso a dx avrai 639 - 479.

    all'intero della routine MouseMove dovrai scrivere il codice che verifica quando le coordinate corrispondono a quelle delle variabili che ti ho trovato.
    un range per evitare di dover puntare un singolo pixel è d'obbligo.
    Fatto test....
    Funziona a maeraviglia!
    Grazie per la pazienza e l'aiuto.

    solo una cosa... quando vado dentro il picturebox, noto un tremolio degli altri elementi nel form... si può evitare?
Devi accedere o registrarti per scrivere nel forum
15 risposte