Afstanden berekenen

Status
Niet open voor verdere reacties.

TonRo

Gebruiker
Lid geworden
21 mrt 2005
Berichten
113
Geachte forumleden,

Ik heb in excel een bestand met diverse postcodes. Van dit forum heb ik ooit code gekregen om snel tussen postcodes de afstand te berekenen.

In kolom A staat de postcode van het vertrekpunt, en in kolom B de postcode van het aankomstpunt. In kolom C staat dan de functie om de afstand uit te rekenen.

Deze VBA code werkt over het algemeen perfect en soms zit er wel een klein verschil in heen en terug zoals je ziet in bijv. rij 1 en rij 2.

Ook in rij 3 en 4 staat een voorbeeld en klopt dit aardig. Alleen in rij 5 en rij 6 gaat het fout. In rij 5 is de heenreis 10 Km en in rij 6 geeft hij afstand 0 Km.

Kan iemand mij vertellen hoe dit komt.

Zit er mogelijk toch iets fout in de VBA code.

Ik heb een vereenvoudigd bestandje toegevoegd, normaal is het een bestand met heel veel postcodes.

Graag een reactie van de deskundigen.

Met vriendelijke groet,

TonRoBekijk bijlage Map1.xlsm
 
Er zit een fout in de VBA-code waardoor de code alleen goed werkt bij 10km en meer.
 
Ik kan het zo snel niet vinden, want bij mij werkt het hele voorbeeld niet. Wat ik wel zie is dat de pagina van ANWB wordt aangeroepen en er gezocht wordt naar het juiste resultaat. Die methode kan, maar biedt geen zekerheid dat het altijd goed gaat. Als ANWB ook maar 1 letter aan de website veranderd kan het zijn dat je macro opeens niet meer werkt.

Persoonlijk zou ik op zoek gaan naar de juiste code via de Google API. Deze is goed gedocumenteerd en wordt je vantevoren over wijzigingen geïnformeerd. Via de API krijg enkel en alleen de gewenste informatie terug en kan er niet zo heel veel meer mis gaan.
 
Helemaal met je eens, RogerS

Code:
Option Explicit

Public Function GoogleMapsXMLDistance(strOrigins As String, strDestinations As String) As String
    'https://developers.google.com/maps/documentation/distancematrix/?hl=nl
    'Usage Limits
    '        100 elements per query.
    '        100 elements per 10 seconds.
    '        2 500 elements per 24 hour period.
    Dim strResult As String
    On Error Resume Next
    With CreateObject("MSXML2.DOMDOCUMENT")
        .async = False
        .Load "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & strOrigins & "&destinations=" & strDestinations & "&sensor=false"    'am_2014
        strResult = .SelectNodes("//status")(0).Text & ", " & .SelectNodes("//status")(1).Text
        If strResult <> "OK, OK" Then
            GoogleMapsXMLDistance = strResult
        Else
            GoogleMapsXMLDistance = .SelectSingleNode("//distance/value").Text / 1000  'distance in kilometers without unit
        End If
    End With
End Function
bron: http://www.worksheet.nl/forumexcel/...enen-met-google-maps-distance-matrix-api.html
 
Laatst bewerkt:
Hallo heren,

Allereerst alvast bedankt dat jullie de moeite hebben genomen mee te denken met me.

De nieuwe code werkt ook erg snel alleen is er wel een groot verschil met de vorige want de afstanden van Rij 3 en Rij vier waren 18 Km en nu nog maar 12,5.

Waar zit dit verschil in.??

En als er in mijn code een fout zit waardoor afstanden kleiner dan 10 Km niet werken, is dit dan niet op te lossen.??

Ik zie in de nieuwe code bovenaan enkele gebruiksbeperkingen staan. Wat houd dit precies in.??

Groet,

TonRo
 
Dat houd precies datgene in wat er staat. Gaat er om dat je geen misbruik van de gratis service gaat maken door onredelijk veel verzoeken op de servers van Google af te vuren.

Afstand kun je op een aantal manieren berekenen en die kunnen aanzienlijk verschillen. Kies je bijv. voor snelste, kortste, rekening houdende met files, afstand rechte lijn, etc......
 
Hallo RogerS,

Kan ik in de code ook aangeven of hij de snelste of kortste route moet gebruiken.??

En ik vraag me nog steeds af waaraan je in mijn code kunt zien dat hij afstanden kleiner dan 10 Km weglaat.??

Groet,

TonRo
 
Mogelijk wel. Even de documentatie van de API doorlezen en je weet het.
 
Google doet niet aan korste of snelste, alleen de ANWB doet dat

De reden voor het verschil in geval 3 is dat google op de A2 een afslag eerder neemt, vergelijk het maar.

De reden voor de fout onder de 10km is dat de code opzoek gaat naar de eerste spatie.
Voor de getallen 0 tot en met 9 staat er altijd een spatie voor, met TRIM haal je die eventueel weg

vervang
Code:
sResult = Mid(sStr, InStr(sStr, sKeyWords) + Len(sKeyWords))
door
Code:
sResult = Trim(Mid(sStr, InStr(sStr, sKeyWords) + Len(sKeyWords)))

De code die jij hebt maakt gebruik van de HTML-opmaak van de oude ANWB site, de site gaat (binnenkort) veranderen (oud en nieuw staan op de site, nieuw is in ontwikkeling), daarmee wordt jouw code waardeloos.
Tevens zitten er coderegels in die niets doen, en er is geen wachtlus om de site tijd te geven om te reageren.
 
Laatst bewerkt:
Heren,

Hier kan ik echt mee verder, jullie hebben mij ontzettend geholpen. Bedankt hiervoor.

Van het gebruik van een API weet ik nog niets maar hier ga ik me eens in verdiepen.

Groet,

TonRo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan