Skip to content

Instantly share code, notes, and snippets.

@brianyoungblood
Forked from alanchrt/gist:1014534
Last active December 22, 2015 21:19
Show Gist options
  • Save brianyoungblood/6532023 to your computer and use it in GitHub Desktop.
Save brianyoungblood/6532023 to your computer and use it in GitHub Desktop.
Highlight all addresses to find county only - new column is created and cells are populated with county.
/*****************************************************************************\
* Batch Spreadsheet geocode find county *
* Author: Alan Christopher Thomas *
* http://alanchristopherthomas.com/ *
\*****************************************************************************/
//Pull counties (administrative_area_level_2) from Google geocoder
function onOpen() {
// Add the Geocode menu
SpreadsheetApp.getActiveSpreadsheet().addMenu("Geocoder", [{
name: "Geocode addresses and append county",
functionName: 'geocodeappendcounty'
},
{
name: "Geocode addresses and log results",
functionName: 'geocodelogger'
}]);
}
function geocode(address) {
// Initialize the geocoder
var geocoder = Maps.newGeocoder();
var location = geocoder.geocode(address);
return location;
}
function geocodelogger() {
// Get the current spreadsheet, sheet, range and selected addresses
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = SpreadsheetApp.getActiveRange();
var addresses = range.getValues();
// Determine the first row and column to geocode
var row = range.getRow();
var column = range.getColumn();
// Set default destination columns
var destination = new Array();
destination[0] = column + 1;
sheet.insertColumnsAfter(column, 1);
var count = range.getHeight();
spreadsheet.toast(count + " addresses are currently being geocoded. " +
"Please wait.", "Loading...", -1);
// Iterate through addresses and geocode
for (i in addresses) {
var location = geocode(addresses[i]);
var county;
Logger.log(location.results[0]);
sheet.getRange(row++, destination[0]).setValue(Utilities.jsonStringify(location));
//spreadsheet.toast(count + " addresses are currently being geocoded. " + "Please wait. ", "Processed " + i + " of " + count, -1);
Utilities.sleep(200);
}
// Remove loading status
spreadsheet.toast("Geocoding is now complete.", "Finished", -1);
}
function geocodeappendcounty() {
// Get the current spreadsheet, sheet, range and selected addresses
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = SpreadsheetApp.getActiveRange();
var addresses = range.getValues();
// Determine the first row and column to geocode
var row = range.getRow();
var column = range.getColumn();
// Set default destination columns
var destination = new Array();
destination[0] = column + 1;
sheet.insertColumnsAfter(column, 1);
var count = range.getHeight();
spreadsheet.toast(count + " addresses are currently being geocoded. " +
"Please wait.", "Loading...", -1);
// Iterate through addresses and geocode
for (i in addresses) {
var location = geocode(addresses[i]);
var county = "";
Logger.log(location.results[0]);
//Loop again to find nested county in administrative_area_level_2
for (var i=0; i<location.results[0].address_components.length; i++) {
for (var b=0;b<location.results[0].address_components[i].types.length;b++) {
if (location.results[0].address_components[i].types[b] == "administrative_area_level_2") {
county = location.results[0].address_components[i];
break;
}
}
}
Logger.log(county.short_name + " " + county.long_name);
//sheet.getRange(row, destination[0]).setValue(location.results[0].lat);
//sheet.getRange(row++, destination[1]).setValue(location.results[0].lng);
sheet.getRange(row++, destination[0]).setValue(county.short_name);
Utilities.sleep(200);
}
// Remove loading status
spreadsheet.toast("Geocoding is now complete.", "Finished", -1);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment