Skip to content

Instantly share code, notes, and snippets.

@jatorre
Created May 3, 2013 22:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jatorre/5514912 to your computer and use it in GitHub Desktop.
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.
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