Bij 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.
Opties van JDI
Team Perlman had voor dit project twee opties; 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 aan een voorkeur te hebben voor de Google API. Over de ANWB routeplanner API 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.
API Documentatie
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.
Verschil tussen Google API en ANWB routeplanner
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 |
---|---|---|---|
Gildekamp 3318, Nijmegen | Beekhuizensweg 12, Velp | 30508m | 30600m |
Professor Molkenboerstraat 3, Nijmegen | Beekhuizensweg 12, Velp | 28422m | 28300m |
Willem van Arenbergstraat 4, Nijmegen | Beekhuizensweg 12, Velp | 22413m | 22400m |
Antoon van Hooffplein 1, Arnhem | Beekhuizensweg 12, Velp | 7118m | 6900m |