Originally Posted by
rvk
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;
Bookmarks