matrice distanze comuni



  • matrice distanze comuni
    di sirjohnhicks data: 28/05/2013 00:06:11

    Salve a tutti,
    per motivi di studio devo costruire una matrice che contenga le distanza fra tutti i comuni italiani. Si tratterebbe, quindi, di una matrice 8000x8000, con la diagonale pari a 0 (incrocio fra la medesima città) e tutte le altre celle che compongono la tabella indicanti la distanza fra due diverse città.

    Per costruirla, sto procedendo in questo modo.
    Innanzitutto, immaginate il foglio excel con la prima cella vuota, poi 8092 comuni nella prima colonna verticale e 8092 comuni nella prima linea orizzontale (ve lo dico per meglio comprendere il codice VBA di sotto!).
    Per la semplicità dell'output e la possibilità di costruire una stringa relativamente semplice da inserire in internet explorer, sto utilizzando "The Google Distance Matrix".

    Ho quindi costruito una macro che fa le seguenti operazioni:

    - crea la stringa dell'url prendendo i nomi delle città dal foglio excel di cui sopra
    - si connette ad internet
    - "pesca" il dato di output relativo alla distanza
    - lo inserisce nella relativa cella

    A questo punto, i problemi che sto incontrando, sono fondamentalmente tre, di cui il secondo mi spingerebbe ad abbondare la strada che ho intrapreso.

    1) L'output dell'API di Google è in xml ed io non lo so maneggiare...riesco comunque a prendere il dato di distanza fra un comune e l'altro, ma a questo si attaccano anche le stringhe di testo:
    es. anzichè prendere solo "4789" (come farebbe con l'html), prende tutto il pezzo "4789";
    in ogni caso, potrei sopperire alla mia ignoranza depurando successivamente tutta la matrice dalle lettere e lasciando così, in qualche modo, solo i valori numerici, ma il vero problema è un altro...

    2) l'API di google ha un numero massimo di richieste giornaliere, ed essendo le celle della matrice molto più numerose di 100000 richieste possibili al giorno, non posso utilizzarlo per fare tutta la tabella...
    Devo quindi abbandonare l'API?E se sì, cosa potrei utilizzare?Ho fatto delle prove con diversi siti che calcolano le distanze, ma con questi, a differenza dell'API, ma non riesco nè a costruire la stringa dell'url, nè a pescare il dato che mi serve dall'html generato con facilità;

    3) la macro non va proprio con excel 2007, cosa potrebbe essere???

    Spero di essere stato chiaro e non esitate a farmi domande!

    Vi ringrazio per l'aiuto che vorrete darmi :)

     
    Sub thematrix()
    Dim ie As New InternetExplorer
    Dim pippo As String
    For i = 2 To 8093
    For x = 1806 To 8093
    pippo = "parte iniziale indirizzo" & Cells(x, 1) & "parte centrale indirizzo" & Cells(1, i) & "parte finale indirizzo"
    ie.Navigate pippo
    'ie.Visible = True
    Do
    DoEvents
    Loop Until ie.readyState = READYSTATE_COMPLETE
    Dim doc As HTMLDocument
    Set doc = ie.document
    Dim sdd As String
    sdd = Trim(doc.getElementsByTagName("value")(1).innerText)
    Cells(x, i) = sdd
    Next
    Next
    End Sub



  • di isy data: 28/05/2013 00:25:52

    Ciao

    Rispondo alla terza domanda
    Cit: 3) la macro non va proprio con excel 2007, cosa potrebbe essere???

    Ho testato la macro con Excel 2013
    Devi in Vba aggiungere i seguenti riferimenti: (Menu: Strumenti Riferimenti)

    Microsoft internet controls
    Microsoft HTML object library

    Ora senza i dati del foglio si ferma alla seguente riga

    Un piccolo passo

     
    sdd = Trim(doc.getElementsByTagName("value")(1).innerText)