fbpx

El formato técnico de latitud y longitud es muy útil para que las computadoras y los sistemas alrededor del mundo puedan procesar información geográfica fácilmente, pero nosotros, los humanos, necesitamos formas más amigables para ubicarnos en el mundo. Por eso usamos direcciones con calle, número, código postal, etcétera. Vamos a seguir aprovechando el potencial de la integración de Google Sheets y Google Maps para hacer un proceso llamado geocodificación inversa (reverse geocoding), que implica obtener una dirección física a partir de un par de coordenadas geográficas. Como el nombre lo dice, es el proceso inverso a geodificar, que ya aprendimos a hacer una vez aquí.

Preparando nuestras coordenadas

Primero, preparemos nuestra hoja de cálculo con las coordenadas ya en el formato que las necesitamos, es decir, una columna para Latitud y otra columna para Longitud. A veces los dos datos vienen en un solo, separados por una coma. Si es tu caso, puedes usar la fórmula SPLIT para separarlos antes de seguir.

Vamos a usar el set de datos al que estamos acostumbrados desde el ejemplo donde aprendimos a geocodificar, que ya sabemos que son direcciones de lugares de interés para visitar en la Ciudad de México.

Configurando nuestro proyecto de Apps Script

Esta vez también vamos a usar código de Apps Script para enviarle los datos de latitud y longitud a Google Maps, esperando que nos regrese una dirección física legible por humanos.

Entonces vamos al menú Herramientas – Editor de secuencias de comandos (Script editor)

Ahora creamos un menú llamado Geocodificación, que incluye a su vez el submenú ‘Convertir coordenadas en direcciones‘, el cual ejecutará la función geocodificacion_inversa() . El código que te aparece por default, lo reemplazaremos por este, que hace 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('Geocodificación')

      .addItem('Convertir coordenadas en direcciones', 'geocodificacion_inversa')
      .addToUi();
}

// Geocodificar inversamente todas las filas a partir de la 2da
function geocodificacion_inversa() {
}

Geocodificación inversa de coordenadas de latitud y longitud a direcciones físicas

Lo que nos resta por hacer ahora es codificar la función que recorra todas las filas a partir de la segunda, tome los datos de latitud y longitud de las columnas correspondientes y del resultado que nos devuelva el proceso de reverse geocoding de Google Maps, extraer la información de la dirección en texto.

// Geocodificar inversamente todas las filas a partir de la 2da
function geocodificacion_inversa() {
  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 latitud = fila[0];
    var longitud = fila[1];

    // Solamente haremos algo si no están vacías las coordenadas, 
    // para no generar errores inesperados
    if(latitud != "" && longitud != "") {
      // Aquí es donde nos conectamos con Google Maps
      var reverseGeocoder = Maps.newGeocoder().reverseGeocode(latitud, longitud);
      var resultado = reverseGeocoder.results[0];

      var direccion = "";

      // Si el geocoder de Google Maps nos devuelve un resultado satisfactorio, 
      // escribimos la dirección en las celdas correspondientes a la fila
      if(resultado) {
        direccion = resultado.formatted_address;
        sheet.getRange(filaInicial + i, 3).setValue(direccion);
      }
    }
  }
}

La primera y segunda celda de cada fila, las guardaremos en variables llamadas latitud y longitud. Después revisamos que no estén vacías las variables, y pedimos a Google Maps que haga geocodificación inversa con el método reverseGeoCode de que provee la API de Google Maps.

En la última parte del código puedes ver cómo estamos revisando cada resultado para asegurarnos de que tiene datos, porque si no, quiere decir que no pudo obtener la dirección a partir de esas coordenadas. Si todo salió bien, guardamos en la variable direccion el dato formatted_address que viene en el resultado que nos regresa.

Después, escribimos el valor que guardamos en la variable direccion en la fila correspondiente según el recorrido del ciclo for y en la tercera columna.

Igual que siempre, te dejo del código completo para que solamente copies, pegues y pruebes 😀

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

function onOpen() {  
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Geocodificación')
      .addItem('Convertir coordenadas en direcciones', 'geocodificacion_inversa')
      .addToUi();
}

// Geocodificar inversamente todas las filas a partir de la 2da
function geocodificacion_inversa() {
  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 latitud = fila[0];
    var longitud = fila[1];

    // Solamente haremos algo si no están vacías las coordenadas, 
    // para no generar errores inesperados
    if(latitud != "" && longitud != "") {
      // Aquí es donde nos conectamos con Google Maps
      var reverseGeocoder = Maps.newGeocoder().reverseGeocode(latitud, longitud);
      var resultado = reverseGeocoder.results[0];

      var direccion = "";

      // Si el geocoder de Google Maps nos devuelve un resultado satisfactorio, 
      // escribimos la dirección en las celdas correspondientes a la fila
      if(resultado) {
        direccion = resultado.formatted_address;
        sheet.getRange(filaInicial + i, 3).setValue(direccion);
      }
    }
  }
}

Ejecutando el código de geocodificación inversa

Ya casi terminamos, solo nos falta ejecutar y probar el código del proyecto. Primero damos click en el botón de Guardar proyecto (o presionamos CTRL + S), y después usamos el botón de Ejecutar una vez.

Esto hará que nos pida los permisos correspondientes para que el proyecto pueda leer y escribir en nuestra hoja de cálculo, entonces los aceptamos:

Vamos a ver el código en acción. Regresamos a la pestaña de la hoja de cálculo y para asegurarnos de que se cargue el código y se muestre el menú, refrescamos la página. Tendremos que ver este menú de ‘Geocodificación’, con la opción de ‘Convertir coordenadas en direcciones’:

Cuando lo ejecutemos, veremos cómo se llena la columna de Dirección a partir de cada par de coordenadas de las columnas de Latitud y Longitud:

Documentación oficial y límites de uso

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 dirección completa, pero podrías obtener por separado el país o el código postal, por ejemplo.

También es importante que tengas en cuenta los límites diarios de uso de las peticiones de Google Maps, por si tienes muchas coordenadas que quieras convertir y no sepas por qué de repente dejó de funcionar el código.

Perfecto, ahora ya sabes cómo convertir coordenadas de latitud y longitud a direcciones en formato humano. Puedes combinar esta guía con la otra en donde aprendimos a geocodificar para poder hacer las dos cosas en la misma hoja de cálculo, por si solo tienes las direcciones o solo tienes las coordenadas. Además, estas direcciones las puedes usar para crear un mapa con Google My Maps, como explico en esta otra guía.

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.