Skip to content

Instantly share code, notes, and snippets.

@russellkt
Created December 3, 2015 14:24
Show Gist options
  • Save russellkt/08144dfe9cb8a7ab0711 to your computer and use it in GitHub Desktop.
Save russellkt/08144dfe9cb8a7ab0711 to your computer and use it in GitHub Desktop.
FireDepartmentGAS
function doGet(request) {
var encodedAddress = request.parameters.address;
var address = decodeURIComponent(encodedAddress);
var location = geocode(address);
var fusionStations = queryFusionForStations(location).rows;
var fireStations = createFireStationsFrom(fusionStations);
var stations = distanceMatrix(location,fireStations);
var response = {'address':address,'stations':stations};
return ContentService.createTextOutput(JSON.stringify(stations))
.setMimeType(ContentService.MimeType.JSON);
}
function geocode(address){
var geocoder = Maps.newGeocoder();
var response = geocoder.geocode(address)["results"][0].geometry.location;
return response;
}
function queryFusionForStations(geocodedAddress){
var fusionTableId = '1zLRiJwiWQotCP9f51sy_AByZEuDLcd8Zyk5tok1K';
var queryString = "SELECT * FROM " + fusionTableId + " ORDER BY ST_DISTANCE(location, LATLNG(" + geocodedAddress['lat'] + "," + geocodedAddress['lng'] +")) LIMIT 10";
var result = FusionTables.Query.sqlGet(queryString, {hdrs: false});
return result;
}
function createFireStationsFrom(fusionStations){
var fireStations = [];
for(i=0; i<fusionStations.length; i++){
var fireStation = {'name':fusionStations[i][0], 'address':fusionStations[i][1], 'lat':fusionStations[i][8], 'lng':fusionStations[i][7] }
fireStations[i] = fireStation;
}
return fireStations;
}
function distanceMatrix(origin, fireStations){
var url = createMatrixUrl(origin, fireStations);
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var distances = JSON.parse(json).rows[0].elements;
var stations = addDistanceToStations(distances, fireStations);
return stations;
}
function addDistanceToStations(distances, stations){
for(i=0;i<stations.length;i++){
stations[i]["distanceText"] = distances[i].distance.text;
stations[i]["distance"] = distances[i].distance.value
}
return stations;
};
function createMatrixUrl(origin, fireStations){
var matrixUrl = 'https://maps.googleapis.com/maps/api/distancematrix/json?';
var parameters = "origins=" + createOriginString(origin) + "&destinations="+createDestinationsString(fireStations);
var key = 'YOURKEY'
matrixUrl = matrixUrl + parameters + '&units=imperial' + '&key=' + key;
return matrixUrl;
}
function createDestinationsString(fireStations){
var destinationStrings = [];
for(i=0; i<fireStations.length; i++){
var coords = [fireStations[i]['lat'],fireStations[i]['lng']];
destinationStrings[i]=coords.join(",")
}
return encodeURIComponent(destinationStrings.join("|"));
}
function createOriginString(origin){
return [origin['lat'],origin['lng']].join(",");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment