Page 2 of 2 FirstFirst 1 2
Results 16 to 24 of 24

Thread: Berekenen afstand tussen 2 adressen

  1. #16
    Quote Originally Posted by WIZZkit View Post
    Ik heb inmiddels ook een ander verschil ontdekt, waarbij het verschil 1 á 2 km is op een afstand van ruim 32km enkele reis.
    Bij mij komt de Api gewoon met 32,08km. Je tweede link (= de heenreis) komt bij mij met 32,1km maar die afronding van 20 meter zal ik hem vergeven

    Code:
    https://maps.googleapis.com/maps/api/distancematrix/xml?origins=Saturnusstraat%2015%205351GX%20Berghem&destinations=Henri%20Dunantstraat%201%205223GZ%20's-Hertogenbosch&sensor=false&mode=driving&key=<api_key>
    De rijdafstand tussen Saturnusstraat 15 5351GX Berghem en Henri Dunantstraat 1 5223GZ 's-Hertogenbosch is 32,08 km
    Last edited by rvk; 05-Oct-22 at 19:48.

  2. #17
    Quote Originally Posted by rvk View Post
    Bij mij komt de Api gewoon met 32,08km. Je tweede link (= de heenreis) komt bij mij met 32,1km maar die afronding van 20 meter zal ik hem vergeven

    Code:
    https://maps.googleapis.com/maps/api/distancematrix/xml?origins=Saturnusstraat%2015%205351GX%20Berghem&destinations=Henri%20Dunantstraat%201%205223GZ%20's-Hertogenbosch&sensor=false&mode=driving&key=<api_key>
    Mag ik vragen welke code je hiervoor gebruikt?
    Ik gebruik de code van LxGoodies.

    Code:
    function GetDistance(vAdr1, vAdr2: String; vMode: String): String;
    var vURL, vMainURL, vLocatieVan, vLocatieNaar: String;
        HTTP : TidHTTP;
        FIdSSL : TIdSSLIOHandlerSocketOpenSSL;
    begin
      Result := '';
      try
        HTTP := TIdHTTP.Create(nil);
        HTTP.Request.BasicAuthentication := False;
        FIdSSL                   := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
        FIdSSL.SSLOptions.Method := sslvTLSv1_2;
        HTTP.IOHandler           := FIdSSL;
        HTTP.ReadTimeout         := 30000;
        HTTP.HandleRedirects     := True;
        vLocatieVan  := vAdr1;
        vLocatieNaar := vAdr2;
        vMainURL:='https://maps.googleapis.com/maps/api/distancematrix/xml';
        vURL:=vMainURL +'?' + 'origins=' + vLocatieVan + '&' + 'destinations=' + vLocatieNaar + '&' + 'key=' + gapikey;
        vURL:=vURL + '&' + 'mode=' + vMode;
        Result := HTTP.Get(vUrl);
      finally
        HTTP.Disconnect;
      end;
    end;
    
    function MetersFromGMapsXML(vMeters : String): Double;
    var vPositie : Integer;
        vError : String;
    begin
      Result := -1.0;
      try
        vPositie := Pos('<distance>', vMeters);
        Delete(vMeters, 1, vPositie);
        vPositie := Pos('<value>', vMeters);
        Delete(vMeters, 1, vPositie);
        vPositie := Pos('</value>', vMeters);
        Result := StrToFloat(trim(copy(vMeters , 7, vPositie -7)));
      except
        if (pos('igin_address><', vMeters) > 0) then
          vError := 'Fout in vertrek-adres.';
        if (pos('tion_address><', vMeters) > 0) then
          vError := 'Fout in bestemming.';
      end;
    end;
    
    function BerekenAfstandHeenEnTerug(vPostcode1, vPostcode2 : String) : Integer;
    var vAfstandHeen, vAfstandTerug, vAdr1, vAdr2 : String;
        vMetersHeen, vMetersTerug, vMetersTotaal : double;
    begin
      Result := 0;
      vAdr1 := StringReplace(vPostcode1,' ', '%20', [rfReplaceAll]);
      vAdr2 := StringReplace(vPostcode2,' ', '%20', [rfReplaceAll]);
      // Heen en Terug rit kunnen verschillen.
      // Heen rit
      vAfstandHeen := GetDistance(vAdr1, vAdr2, 'driving');
      vMetersHeen  := MetersFromGMapsXML(vAfstandHeen);
      // Terug rit
      vAfstandTerug := GetDistance(vAdr2, vAdr1, 'driving');  // Omgekeerde adressen
      vMetersTerug  := MetersFromGMapsXML(vAfstandTerug);
      // Totale afstand heen en terug
      vMetersTotaal := vMetersHeen + vMetersTerug;
      if (vMetersTotaal > 0) then
      begin
        Result := AfrondenInt(Afronden((vMetersTotaal / 1000), 0));  // Heen en terug afstand
      end;
    end;

  3. #18
    Ja, die code heb ik gebruikt.

    Enige verschil is dat ik een urlencode gebruikt heb zodat ' e.d. ook omgezet worden.

    Ps. Ik had ook de result van sURL gepost dus die kun je vergelijken.
    (Of even met je eigen api-key zelf uittesten in een browser)

  4. #19
    Quote Originally Posted by rvk View Post
    Ja, die code heb ik gebruikt.

    Enige verschil is dat ik een urlencode gebruikt heb zodat ' e.d. ook omgezet worden.

    Ps. Ik had ook de result van sURL gepost dus die kun je vergelijken.
    (Of even met je eigen api-key zelf uittesten in een browser)
    Hartelijk bedankt voor de hulp.
    Ik heb i.p.v. de meters de kilometers gebruikt en nu werkt het in ieder geval correct.
    Code:
    function KilometersFromGMapsXML(vKilometers : String): Double;
    var vPositie : Integer;
        vError : String;
    begin
      Result := -1.0;
      try
        vPositie := Pos('<distance>', vKilometers);
        Delete(vKilometers, 1, vPositie);
        vPositie := Pos('<text>', vKilometers);
        Delete(vKilometers, 1, vPositie + 5);
        vPositie := Pos('</text>', vKilometers);
        vKilometers := copy(vKilometers , 1, vPositie -1);
        vKilometers := Trim(StringReplace(vKilometers, 'km', '', [rfReplaceAll]));
        vKilometers := StringReplace(vKilometers, '.', ',', [rfReplaceAll]);
        Result := StrToFloat(vKilometers);
      except
        if (pos('igin_address><', vKilometers) > 0) then
          vError := 'Fout in vertrek-adres.';
        if (pos('tion_address><', vKilometers) > 0) then
          vError := 'Fout in bestemming.';
      end;
    end;

  5. #20
    Raar. Ik heb de originele code gebruikt en die werkt prima.

    Waarom zou je de <text> pakken in km terwijl in <value> de meters correct staat.
    Let op dat <text> ook eventueel meters of miles etc kan staan.

    Dit is mijn resultaat xml

    XML Code:
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <DistanceMatrixResponse>
    3.  <status>OK</status>
    4.  <origin_address>Saturnusstraat 15, 5351 GX Berghem, Nederland</origin_address>
    5.  <destination_address>Henri Dunantstraat 1, 5223 's-Hertogenbosch, Nederland</destination_address>
    6.  <row>
    7.   <element>
    8.    <status>OK</status>
    9.    <duration>
    10.     <value>1635</value>
    11.     <text>27 min</text>
    12.    </duration>
    13.    <distance>
    14.     <value>32079</value>
    15.     <text>32,1 km</text>
    16.    </distance>
    17.   </element>
    18.  </row>
    19. </DistanceMatrixResponse>

    Die 32079 meter is toch prima. Dat is 32,079km.

    LET OP. In jouw code pak je de heen EN terugreis. Maar die zijn niet hetzelfde. Dus het is niet dat je altijd 2x 32.1km krijgt.
    (Terugreis is langer, iets van 35km?)

    Dus wat is nu de reden waarom jij nu <text> zou willen pakken (met alle risico's van conversie van dien)?
    Kun je eens jouw XML laten zien? Heb jij andere resultaten in <text> en <value> staan ??

  6. #21
    Quote Originally Posted by rvk View Post
    Raar. Ik heb de originele code gebruikt en die werkt prima.
    Dus wat is nu de reden waarom jij nu <text> zou willen pakken (met alle risico's van conversie van dien)?
    Kun je eens jouw XML laten zien? Heb jij andere resultaten in <text> en <value> staan ??
    Ik ben het helemaal met je eens dat het werken met meters veel veiliger is.
    Waarschijnlijk heeft het te maken gehad met het opschonen van de XML. Dit heb ik nu aangepast zodat alleen het aantal meters overblijft.
    Code:
    function MetersFromGMapsXML(vMeters : String): Double;
    var vPositie : Integer;
    begin
      Result := -1.0;
      try
        vPositie := Pos('<distance>', vMeters);
        Delete(vMeters, 1, vPositie -1);
        vPositie := Pos('<value>', vMeters);
        Delete(vMeters, 1, vPositie + 6);
        vPositie := Pos('</value>', vMeters);
        vMeters := Copy(vMeters, 1, vPositie -1);
        vMeters := Trim(vMeters);
        Result := StrToFloat(vMeters);
      except
      end;
    end;
    Hartelijk bedankt voor je hulp.

  7. #22
    Ik blijf het raar vinden.
    Jouw eerste MetersFromGMapsXML is niet wezenlijk anders dan het origineel (hoewel die inderdaad wat raar werkt).
    Dus die zou gewoon moeten werken.

    Ik heb even jouw routines gepakt en ik krijg gewoon netjes 32,08 terug.
    (Ik heb niet de BerekenAfstandHeenEnTerug gebruikt maar gewoon direct de MetersFromGMapsXML)
    Je fout moet dus in de BerekenAfstandHeenEnTerug gezeten hebben (maar die geeft natuurlijk niet 32,08 terug maar de totale afstand van heen en terug).

    Maar goed, je nieuwe functie doet het strippen van de meters wat 'logischer' dus fijn dat het nu werkt

  8. #23
    Google Maps heeft (op mobiel tenminste), de neiging om de route aan te passen naar het vervoersmiddel, de huidige drukte, wat voor soort brandstof je gebruikt, en of je graag de kortste, snelste of de meest economische route wilt hebben.
    Al met al zitten er nog wat variabelen in waardoor ik me voor kan stellen dat je een paar procent afwijking krijgt.
    1+1=b

  9. #24
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Quote Originally Posted by GolezTrol View Post
    waardoor ik me voor kan stellen dat je een paar procent afwijking krijgt.
    Ja dat klopt en dat zie je ook gebeuren als je, bijvoorbeeld de ANWB afstandsberekeningstool gebruikt om je kilometerdeclaraties op te geven.
    Als ik dezelfde afstand (gebruikmaken van exact dezelfde route) van huis naar kantoor en vice versa opgeef, dan zit er een verschil in van 200m (8,4km tov 8,2km).

    De ANWB lijkt data van TomTom te gebruiken.
    Ik weet niet of die data uiteindelijk weer uit dezelfde bron komt als waar Google zijn data vandaan haalt, dus het kan een ongeldige vergelijking zijn.
    TMemoryLeak.Create(Nil);

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •