Skip to content

Instantly share code, notes, and snippets.

@hhkaos
Last active December 21, 2019 06:05
Show Gist options
  • Save hhkaos/0a9bd9bf987592120fc1d68b4e6deec5 to your computer and use it in GitHub Desktop.
Save hhkaos/0a9bd9bf987592120fc1d68b4e6deec5 to your computer and use it in GitHub Desktop.
Script used in Google Forms to Geocode an address on Submit using ArcGIS Geocoder. Live demo: http://bit.ly/EOEcosystem
function getData(url){
Utilities.sleep(1000);
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
return JSON.parse(json);
}
function getToken(client_id, client_secret){
Utilities.sleep(1000);
var options = {
'method' : 'post',
'payload' : {
'client_id': client_id,
'client_secret': client_secret,
'grant_type': 'client_credentials',
'expiration': 60
}
};
var response = UrlFetchApp.fetch('https://www.arcgis.com/sharing/rest/oauth2/token/', options);
var obj = JSON.parse(response.getContentText());
return obj.access_token;
}
function esriGeocoder(value) {
var token = getToken("client_id", "client_secret");
var url = "http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates?SingleLine=" + value + "&category=&outFields=*&forStorage=true&token=" + token + "&f=pjson";
var data = getData(url);
if(data.candidates[0]){
lat = parseFloat(data.candidates[0].location.y).toFixed(5);
lon = parseFloat(data.candidates[0].location.x).toFixed(5);
}else{
lat = lon = 0;
}
return [lat, lon];
}
function onCustomSubmit(e) {
var response = e.values;
// Logger.log('e: ' + JSON.stringify(e) );
var formResponse = e.response;
// Logger.log('formResponse: ' + formResponse);
// Logger.log('JSON.stringify(formResponse): ' + JSON.stringify(formResponse));
var itemResponses = formResponse.getItemResponses();
var itemResponsesLength = itemResponses.length;
// Logger.log('itemResponsesLength: ' + itemResponsesLength);
var form = e.source;
// Logger.log('form: ' + form);
spreadsheetId = form.getDestinationId()
// Logger.log('spreadsheetId: ' + spreadsheetId);
var ss = SpreadsheetApp.openById(spreadsheetId);
var tab = ss.getSheetByName("Form Responses 1");
for (var j = 0; j < itemResponsesLength; j++) {
var itemResponse = itemResponses[j];
var response = itemResponse.getResponse();
var question = itemResponse.getItem().getTitle();
// Logger.log('question: ' + question);
// Logger.log('response: ' + response);
if(question == 'Localización'){
addLocation(tab,response);
}
}
}
function addLocation(tab, response) {
var lastRow = tab.getLastRow();
// Logger.log('Vamos a añadir a lastRow: ' + lastRow)
// Logger.log('La geocodificación de: ' + response)
var location = esriGeocoder(response)
var celdaLat = tab.getRange('M'+lastRow);
celdaLat.setFormula(location[0]);
var celdaLon = tab.getRange('N'+lastRow);
celdaLon.setFormula(location[1]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment