Captura1

En este artículo, exploraremos un script de Python que permite geocodificar direcciones desde un archivo Excel y generar un archivo KML que puede ser utilizado en aplicaciones de mapas. Este proceso es útil para quienes necesitan visualizar datos geográficos de manera sencilla.

Resumen del script

El script que vamos a analizar realiza las siguientes funciones:

  1. Obtener coordenadas geográficas: Utiliza la API de Google Maps para convertir direcciones en coordenadas de latitud y longitud.
  2. Leer un archivo Excel: Busca un archivo Excel en el directorio actual que contenga una columna con direcciones.
  3. Generar un archivo KML: Crea un archivo KML que contiene marcadores para cada dirección geocodificada, lo que permite visualizar estas ubicaciones en aplicaciones como Google Earth.
  4. Guardar resultados: Exporta un nuevo archivo Excel con las coordenadas obtenidas.

Instalación de librerías necesarias

Antes de utilizar el script, asegúrate de tener instaladas las siguientes librerías de Python. Puedes instalarlas utilizando pip:

pip install pandas requests tqdm openpyxl
  • pandas: Para manipular datos en formato tabular (Excel).
  • requests: Para realizar solicitudes HTTP a la API de Google Maps.
  • tqdm: Para mostrar una barra de progreso durante la ejecución del script.
  • openpyxl: Para leer y escribir archivos Excel.

Uso del script paso a paso

1. Configurar la API de Google Maps

Antes de ejecutar el script, necesitas obtener una clave de API de Google Maps. Esto se puede hacer a través de la Consola de Google Cloud:

  • Crea un nuevo proyecto.
  • Habilita la API de Geocodificación.
  • Genera una nueva clave de API.

Reemplaza 'TUAPI' en el script con tu clave de API.

2. Preparar el archivo Excel

Crea un archivo Excel (.xlsx) que contenga una columna llamada direccion con las direcciones que deseas geocodificar. Asegúrate de que no haya otras columnas con el mismo nombre.

Ejemplo de un archivo Excel:

Item Direccion
1 Álvarez 910, Tercero de Cobián, Torreón, Coah.
2 Calz Cuitláhuac 189, Moctezuma, Torreón, Coah.
3 Río Volga 1300, Magdalenas, Torreón, Coah.

3. Ejecutar el script

Guarda el script en un archivo Python (por ejemplo, geocodificador.py) y colócalo en el mismo directorio donde se encuentra tu archivo Excel. Luego, ejecuta el script desde la terminal:

python geocodificador.py
import os
import pandas as pd
import requests
from glob import glob
from tqdm import tqdm
import time
GOOGLE_MAPS_API_KEY = 'TUAPI'
def obtener_coordenadas(direccion):
    url = f'https://maps.googleapis.com/maps/api/geocode/json?address={direccion}&key={GOOGLE_MAPS_API_KEY}'
    response = requests.get(url)
    data = response.json()

    if data['status'] == 'OK':
        location = data['results'][0]['geometry']['location']
        return location['lat'], location['lng']
    else:
        print(f"No se encontraron coordenadas para la dirección: {direccion}")
        return None, None
def generar_kml(df, output_dir):
    kml_content = '<?xml version="1.0" encoding="UTF-8"?>\n'
    kml_content += '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
    kmlcontent += '  <Document>\n'
    for , row in df.iterrows():
        if pd.notnull(row['Latitud']) and pd.notnull(row['Longitud']):
            kml_content += '    <Placemark>\n'
            kml_content += f'      <name>{row["direccion"]}</name>\n'
            kml_content += '      <Point>\n'
            kml_content += f'        <coordinates>{row["Longitud"]},{row["Latitud"]},0</coordinates>\n'
            kml_content += '      </Point>\n'
            kml_content += '    </Placemark>\n'
    kml_content += '  </Document>\n'
    kml_content += '</kml>\n'

    kml_filename = os.path.join(output_dir, 'output_geocodificado.kml')
    with open(kml_filename, 'w', encoding='utf-8') as f:
        f.write(kml_content)

    print(f"Archivo KML guardado en: {kml_filename}")
def procesar_excel():
    # Busca un archivo Excel en el directorio actual
    input_files = glob("*.xlsx")

    if len(input_files) == 0:
        print("Error: No se encontró ningún archivo Excel en el directorio.")
        return
    elif len(input_files) > 1:
        print("Error: Hay más de un archivo Excel en el directorio. Solo debe haber uno.")
        return

    input_filename = input_files[0]
    df = pd.read_excel(input_filename)

    if 'direccion' not in df.columns:
        print("Error: La columna 'direccion' no se encontró en el archivo.")
        return

    latitudes = []
    longitudes = []

    # Utilizar tqdm para mostrar la barra de progreso
    for direccion in tqdm(df['direccion'], desc="Obteniendo coordenadas", unit="dir"):
        lat, lng = obtener_coordenadas(direccion)
        latitudes.append(lat)
        longitudes.append(lng)
        # Agrega una pausa de 0.5 segundos entre cada solicitud
        time.sleep(0.5)

    df['Latitud'] = latitudes
    df['Longitud'] = longitudes

    output_dir = os.path.join(os.path.dirname(input_filename), 'processed')
    os.makedirs(output_dir, exist_ok=True)

    output_filename = os.path.join(output_dir, 'output_geocodificado.xlsx')
    df.to_excel(output_filename, index=False)
    print(f"Archivo guardado en: {output_filename}")

    # Generar archivo KML
    generar_kml(df, output_dir)
# Ejecuta el procesamiento del archivo de Excel
procesar_excel()

El script buscará automáticamente el archivo Excel en el directorio actual, leerá las direcciones, obtendrá las coordenadas y generará un nuevo archivo Excel con las columnas de latitud y longitud. También creará un archivo KML en una carpeta llamada processed dentro del mismo directorio.

4. Visualización de resultados

Una vez que el script haya terminado de ejecutarse, encontrarás un archivo llamado output_geocodificado.xlsx en la carpeta processed. Este archivo contendrá las direcciones originales junto con sus respectivas coordenadas.

Además, el archivo KML llamado output_geocodificado.kml estará disponible para ser abierto en aplicaciones de mapas como Google Earth. Para visualizar el archivo KML:

  1. Abre Google Earth.
  2. Selecciona “Archivo” > “Abrir”.
  3. Navega hasta el archivo output_geocodificado.kml y ábrelo.

5. Ejemplo de archivo KML

Captura2

Este script es una herramienta poderosa y fácil de usar que permite transformar direcciones en coordenadas geográficas y generar archivos KML para visualización. Con solo unos pasos, puedes geocodificar un conjunto de direcciones y obtener visualizaciones útiles para tu trabajo o proyectos personales.