Last active
October 3, 2024 17:11
-
-
Save simonwhatley/4ea2e87815747bf14d1d247181248512 to your computer and use it in GitHub Desktop.
Get the distance between 2 addresses in Google Sheets using Google Maps
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Get the distance between 2 different addresses. | |
* @param {string} origin_address The origin/start address as string Eg. "102 Petty France, London, SW1H 9AJ". | |
* @param {string} destination_address The destination/end address as string Eg. "10 Whitechapel High Street, London, E1 8QS". | |
* @param {string} travel_mode The mode of travel as string. Default: DRIVING. Options: BICYCLING, TRANSIT, WALKING. | |
* @param {string} return_type The return type as string. Default: MILES. Options: KILOMETERS, MINUTES, HOURS, STEPS. | |
* @return the distance between 2 different addresses. | |
* @customfunction | |
*/ | |
function GOOGLEDISTANCE(origin_address,destination_address,travel_mode,return_type) { | |
Utilities.sleep(1000); | |
var travelMode = ""; | |
switch(travel_mode) { | |
case "BICYCLING": | |
case "bicycling": | |
travelMode = Maps.DirectionFinder.Mode.BICYCLING; | |
break; | |
case "DRIVING": | |
case "driving": | |
travelMode = Maps.DirectionFinder.Mode.DRIVING; | |
break; | |
case "TRANSIT": | |
case "transit": | |
travelMode = Maps.DirectionFinder.Mode.TRANSIT; | |
break; | |
case "WALKING": | |
case "walking": | |
travelMode = Maps.DirectionFinder.Mode.WALKING; | |
break; | |
default: | |
// Default to driving | |
travelMode = Maps.DirectionFinder.Mode.DRIVING; | |
//return "Error: Wrong travel mode"; | |
} | |
// var auth = Maps.setAuthentication(clientId, signingKey); | |
var directions = Maps.newDirectionFinder() | |
.setRegion('UK') | |
.setLanguage('en-GB') | |
.setOrigin(origin_address) | |
.setDestination(destination_address) | |
.setMode(travelMode) | |
.getDirections(); | |
if (directions.status !== "OK") | |
return "Error: " + directions.status; | |
var route = directions.routes[0].legs[0]; | |
var time = route.duration.value; | |
var distance = route.distance.value; | |
var steps = route.steps.map(function(step) { | |
return step.html_instructions.replace(/<[^>]+>/g, ""); | |
}).join("\n"); | |
switch(return_type) { | |
case "MILES": | |
case "miles": | |
return distance * 0.000621371; | |
break; | |
case "KILOMETERS": | |
case "kilometers": | |
return distance / 1000; | |
break; | |
case "MINUTES": | |
case "minutes": | |
return time / 60; | |
break; | |
case "HOURS": | |
case "hours": | |
return time / 60 / 60; | |
break; | |
case "STEPS": | |
case "steps": | |
return steps; | |
break; | |
default: | |
// Default to miles | |
return distance * 0.000621371; | |
//return "Error: Wrong return type"; | |
} | |
} |
@foose212 seems like we are now to use a regular HTTP API request, using the Google Scripts URLfetch service
Hello,
Does anyone know how i can use the =GOOGLEDISTANCE formula to determine the clossest location?
I have 3 traininglocations and want to determine wich location is the clossest to the employers house. I tryed with using the =MIN formula, but dont get the values right.
Currently the code is giving me the distance in miles when I request for it to be in Kilometres, anyone had this problem?
@eliza13-fry Have you checked the spelling of kilometers
(it’s “er” not “re” at the end)?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sorry, I'm not really familiar with coding. I see on line 38 you have setAuthentication, but this has been discontinued by google. https://developers.google.com/apps-script/reference/maps/maps
How should the I update this just using my API key?
thanks