Voor het berekenen van de afstand tussen twee punten, voor het declareren van reiskosten, gebruiken wij de Google Distance Matrix API. Voor de API hebben wij een key om deze te gebruiken in de back-end. Voor de eerste 100.000 requests kost het 0.005USD per request, er is echter per maand een gratis krediet beschikbaar van 200USD.
Wij waren voor het project de opties gegeven gebruik te maken van de Google Matrix Distance API of een ANWB routeplanner API, JDI heeft voorheen altijd de routeplanner op de site van de ANWB gebruikt maar gaf de voorkeur uit naar de Google API. Over de ANWB routeplanner API zelf is niks te vinden, alleen APIs die claimen gelijke resultaten te hebben met de ANWB routeplanner. Met voorkeur naar de Google API vanuit JDI, hebben wij er voor gekozen gebruik te maken van deze API.
Bij het versturen van een request kunnen er verschillende parameters worden mee gegeven:
Type | Beschrijving | Verplicht |
---|---|---|
destination | het eind punt | Ja |
origin | het begin punt | Ja |
arrival_time | de tijd waarop je aan zou komen | Nee |
departure_time | de tijd waarop je zou vertrekken | Nee |
avoid | resticties om te voorkomen zoals: toll wegen, snelweg, veerboot of binnen plekken | Nee |
language | de taal waarin je het terug krijgt | Nee |
mode | transport mode zoals: rijden, lopen fietsen of het OV | Nee |
region | regio code | Nee |
traffic_model | aanname bij het berekenen van de reistijd | Nee |
transit_mode | specificatie van welk type OV gebruikt mag worden zoals: bus of trein | Nee |
transit_routing_preference | extra voorkeuren zoals: zo min mogelijk lopen of overstappen | Nee |
units | in welke unit het wordt terug gegeven | Nee |
Voor ons doeleinde gebruiken wij alleen de 'destination', 'origin' en 'units' om de afstand te berekenen in kilometers.
De functie die wij hiervoor zullen gebruiken ziet er uit als volgt:
String url = "https://maps.googleapis.com/maps/api/distancematrix/json?destinations=" + destination + "&origins=" + origin + "&units=metric&key=" + APIKEY;
String resultString = restTemplate.getForObject(url, String.class);
Uit deze functie komt een JSON object terug, een voorbeeld hiervan ziet er zo uit:
{
"destination_addresses": [
"Zoetendaal 31, 6662 XG Elst, Netherlands"
],
"origin_addresses": [
"Professor Molkenboerstraat 3, 6524 RN Nijmegen, Netherlands"
],
"rows": [
{
"elements": [
{
"distance": {
"text": "13.5 km",
"value": 13510
},
"duration": {
"text": "20 mins",
"value": 1181
},
"status": "OK"
}
]
}
],
"status": "OK"
}
Hier wordt de afstand uitgehaald en vervolgens wordt deze samen met het begin en eindpunt in de database opgeslagen in de tabel 'ROUTE'.
Uiteindelijk zal dit gebruikt worden om de reiskosten te berekenen van een gebruiker.
Tot slot zijn wij gevraagd door JDI een overzicht te maken van de verschillen tussen de afstanden berekend door de ANWB routeplanner en de door ons gebruikte Google API, deze ziet er als volgt uit:
Locatie A | Locatie B | Afstand Google API | Afstand ANWB routeplanner |
---|---|---|---|