Created
May 3, 2013 22:57
-
-
Save jatorre/5514912 to your computer and use it in GitHub Desktop.
Example of a Google Spcripting language program to insert data from a Google Form, georeference it and insert it on CartoDB.
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 onFormSubmission(e) { | |
//Georeference the submission | |
var loc = geocode(e.namedValues.location); | |
postToCartoDB( | |
e.namedValues.location, | |
e.namedValues.sport, | |
loc.lat, | |
loc.lng | |
); | |
} | |
function geocode(address) { | |
var response = UrlFetchApp.fetch("http://maps.googleapis.com/maps/api/geocode/json?address="+escape(address)+"&sensor=false"); | |
var respObj=Utilities.jsonParse(response.getContentText()); | |
var loc = {lat:NaN,lng:NaN}; | |
try { | |
loc = respObj.results[0].geometry.location | |
} catch(e) { | |
Logger.log("Error geocoding: "+address); | |
} | |
return loc; | |
} | |
function testSubmission() { | |
var ev = {}; | |
ev.namedValues = {location:"berlin'dd",sport:"soccer"}; | |
onFormSubmission(ev); | |
} | |
function postToCartoDB(location,sport,latitude,longitude) { | |
Logger.log("posting to CartoDB"); | |
var cartodb_host = "osm2.cartodb.com"; //Your CartoDB domain | |
var cartodb_api_key = "#######"; //Your CartoDB API KEY | |
var loc = ""; | |
if (latitude && longitude) { | |
loc = "CDB_LatLng("+latitude+","+longitude+")"; | |
} else { | |
loc="null"; | |
} | |
Logger.log("cdb_escape_string: "+(location)); | |
//var query = "INSERT INTO gdocs_submissions(location,sport,the_geom) VALUES('"+cdb_escape_string(location)+"','"+cdb_escape_string(sport)+"',"+loc+")"; | |
var query = "INSERT INTO gdocs_submissions(location,sport,the_geom) VALUES('"+location+"','"+sport+"',"+loc+")"; | |
Logger.log("SQL: "+query); | |
var options = { | |
"method" : "post", | |
"payload" : {q:query,api_key:cartodb_api_key} | |
}; | |
var response = UrlFetchApp.fetch("https://"+cartodb_host+"/api/v1/sql", options); | |
var respObj=Utilities.jsonParse(response.getContentText()); | |
Logger.log("CDB call result: "+respObj); | |
} | |
//THIS is a non tested simple escape string function for CartoDB | |
function cdb_escape_string (str) { | |
return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) { | |
switch (char) { | |
case "\0": | |
return "\\0"; | |
case "\x08": | |
return "\\b"; | |
case "\x09": | |
return "\\t"; | |
case "\x1a": | |
return "\\z"; | |
case "\n": | |
return "\\n"; | |
case "\r": | |
return "\\r"; | |
case "'": | |
return "''"; | |
case "\"": | |
case "\\": | |
case "%": | |
return "\\"+char; // prepends a backslash to backslash, percent, | |
// and double/single quotes | |
} | |
}); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment