Cuando tenemos información geográfica de forma que los humanos la entendemos, lo más común es tenerlas en forma de una dirección que lleva una calle, un número, código postal, etcétera. Pero hay veces en que por cualquier razón tenemos que ser más precisos, y para eso existe una forma más técnica de representar información geográfica, con coordenadas exactas de latitud y longitud. Utilizando el poder de las hojas de cálculo de Google y su integración con Google Maps, hoy veremos cómo hacer geocoding (geocodificación), o lo que es lo mismo, convertir direcciones en coordenadas de latitud y longitud.

Preparando nuestras direcciones

Lo primero es que tengamos nuestra lista de direcciones en la hoja de cálculo. En este ejemplo tendremos varios lugares de interés para visitar como turistas en la Ciudad de México, que también ya usamos previamente para crear un mapa con Google My Maps. También tendremos una columna para cada coordenada geográfica, una para guardar la latitud y otra para la longitud.

Configurando nuestro proyecto de Apps Script

A partir de ahora, vamos a tener que usar un poco de código de Apps Script para comunicarnos con Google Maps y pedirle que interprete estas direcciones.

Para eso, vamos al menú Extensiones – Apps Script

Lo siguiente que tenemos que hacer es crear mediante código un pequeño menú, que al seleccionar ejecute una función propia llamada geocodificar. Por ahora reemplazaremos el código default por este, que hace justo lo que acabamos de decir:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var dataRangeAll = sheet.getDataRange();
var ultimaFila = dataRangeAll.getLastRow();

function onOpen() {  
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Geocodificar')
      .addItem('Convertir direcciones en coordenadas', 'geocodificar')
      .addToUi();
}

// Geocodificar todas las filas con texto a partir de la 2da
function geocodificar() {
}
Lenguaje del código: JavaScript (javascript)

Geocodificar direcciones a coordenadas de latitud y longitud

Y ahora sí, lo que resta por hacer es recorrer todas las filas a partir de la segunda y utilizar el geocoder de Google Maps para enviarle las direcciones en texto, y del resultado que nos devuelva, extraer la parte que nos interesa, que es la latitud y la longitud.

// Geocodificar todas las filas a partir de la 2da
function geocodificar() {
  var filaInicial = 2;
  var dataRange = sheet.getRange(filaInicial, 1,ultimaFila, 3);
  var data = dataRange.getValues();

  // Recorremos todas las filas del rango
  for(var i=0; i< data.length; i++) {
    var fila = data[i];

    var direccion = fila[0];

    // Solamente haremos algo si hay algo en la celda de dirección, 
    // para no generar errores inesperados
    if(direccion != "") {
      // Aquí es donde nos conectamos con Google Maps
      var geocoder = Maps.newGeocoder().geocode(direccion);
      var resultado = geocoder.results[0];

      var latitud = 0;
      var longitud = 0;

      // Si el geocoder de Google Maps nos devuelve un resultado satisfactorio, 
      // escribimos la latitud y longitud en las celdas correspondientes al a fila
      if(resultado) {
        latitud = resultado.geometry.location.lat;
        longitud = resultado.geometry.location.lng;
        sheet.getRange(filaInicial + i, 2).setValue(latitud);
        sheet.getRange(filaInicial + i, 3).setValue(longitud);
      }
    }
  }
}
Lenguaje del código: JavaScript (javascript)

Si vamos paso por paso, podemos fijarnos bien en que hay que asegurarnos de que nos devuelva un resultado correcto, por cada dirección que estemos evaluando.

Este sería el código completo, con todo y menú, por si venías solo a copiar y a pegar 😜

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var dataRangeAll = sheet.getDataRange();
var ultimaFila = dataRangeAll.getLastRow();

function onOpen() {  
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Geocodificar')
      .addItem('Convertir direcciones en coordenadas', 'geocodificar')
      .addToUi();
}

// Geocodificar todas las filas a partir de la 2da
function geocodificar() {
  var filaInicial = 2;
  var dataRange = sheet.getRange(filaInicial, 1,ultimaFila, 3);
  var data = dataRange.getValues();

  // Recorremos todas las filas del rango
  for(var i=0; i< data.length; i++) {
    var fila = data[i];

    var direccion = fila[0];

    // Solamente haremos algo si hay algo en la celda de dirección, 
    // para no generar errores inesperados
    if(direccion != "") {
      // Aquí es donde nos conectamos con Google Maps
      var geocoder = Maps.newGeocoder().geocode(direccion);
      var resultado = geocoder.results[0];

      var latitud = 0;
      var longitud = 0;

      // Si el geocoder de Google Maps nos devuelve un resultado satisfactorio, 
      // escribimos la latitud y longitud en las celdas correspondientes al a fila
      if(resultado) {
        latitud = resultado.geometry.location.lat;
        longitud = resultado.geometry.location.lng;
        sheet.getRange(filaInicial + i, 2).setValue(latitud);
        sheet.getRange(filaInicial + i, 3).setValue(longitud);
      }
    }
  }
}
Lenguaje del código: JavaScript (javascript)

Probando el código de geocodificación

Bien, ahora solo queda guardar el código de nuestro proyecto, y damos click en el botón de Ejecutar una vez, para que nos pida los permisos correspondientes para poder escribir en la hoja de cálculo

Y permitimos al proyecto el acceso a los datos de nuestra propia hoja de cálculo:

Ahora, para ver el código en acción, regresamos a la pestaña de la hoja de cálculo y refrescamos la página para ver nuestro menú llamado ‘Geocodificar’:

Al ejecutarlo, veremos cómo se llenan las columnas de Latitud y Longitud a partir de las direcciones escritas:

Corroborando los datos en Google Maps

Los resultados que obtengamos dependerán de qué tan específicos hayamos sido con cada dirección escrita, porque a partir de una dirección con un nombre de calle muy común, Google Maps podría interpretar varios resultados en países o estados diferentes, pero solo te devolverá el más probable. Es decir, debes corroborar tus resultados.

Una forma sencilla de confirmar tus datos es simplemente copiando y pegando las coordenadas desde tu hoja de cálculo en Google Maps:

En la documentación oficial de Google puedes revisar más información sobre todo lo que se puede hacer con el resultado que devuelve Google Maps, ya que nosotros solo estamos usando la latitud y la longitud. También es importante que revises los límites diarios de uso de las peticiones de Maps, por si tienes muchas direcciones.

¡Y listo! Ahora ya sabes cómo convertir varias direcciones en coordenadas de latitud y longitud con hojas de cálculo de Google y Google Maps fácilmente.

Plantilla terminada para descargar

Guía en video

Si tienes dudas puedes ver esta misma guía explicada en video:

¡Espero que te haya sido útil esta guía! No olvides seguirnos en YouTube para más tips, trucos y guías de productividad.

Aprende Sheets: Curso práctico de Hojas de cálculo de Google
Aprende Sheets: Curso práctico de Hojas de cálculo de Google