Created
December 3, 2015 14:24
-
-
Save russellkt/08144dfe9cb8a7ab0711 to your computer and use it in GitHub Desktop.
FireDepartmentGAS
This file contains hidden or 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
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