Generar un archivo KML a partir de coordenadas GPS con Python

En ocasiones tengo que marcar lugares en Google Earth. Es divertido cuando son 3 o 4. Cuando son 10 o más ya es cosa seria, pero marcar más de mil puntos ya no es práctico hacerlo de forma manual.

Por eso decidí hacer un programa en Python que a partir de las coordenadas almacenadas en un archivo CSV pudiera generar un par de archivos KML que se abren sin problemas en Google Earth y muestran la ubicación de esos puntos en el planeta.

SimpleKML y CSV

Una de las muchas ventajas de Python es que no tienes que empezar desde cero. Para importar la información del archivo usé el módulo CSV. Es muy fácil de utilizar. Al barrer el contenido del archivo, por cada coordenada se agrega su punto correspondiente en el archivo KML.

with open(archivocsv, newline='') as File:
    reader = csv.reader(File)
    for row in reader:               
        longlat = row[2], row[1]
        coordenadas.append(longlat)
        kml.newpoint(name=row[0], coords=[longlat])

Hay varios módulos para generar archivos KML en Python, pero simpleKML me pareció, haciendo honor a su nombre, el más sencillo.

Su código de ejemplo así lo demuestra:

import simplekml
kml = simplekml.Kml()
kml.newpoint(name="Kirstenbosch", coords=[(18.432314,-33.988862)])  # lon, lat, optional height
kml.save("botanicalgarden.kml")

Ahora solo tenía que adaptar ese código con la información almacenada en el archivo CSV.

Al principio me llevé un gran susto, porque el resultado me apareció en el polo sur. Y es que, para este caso, primero va la longitud y luego la latitud.

Una vez que invertí el orden de las coordenadas el resultado fue el esperado.

Ejemplo

Como ejemplo, tengo la información de 4 puntos que rodean a la Isla Guadalupe, el punto más occidental de México.

1,29.189462,-118.553373
2,29.254561,-118.124540
3,28.806708,-118.080127
4,28.777603,-118.459080
Los 4 puntos ahora se pueden ver en Google Earth.
Ahora se pueden ver en el mapa los punto 1,2,3 y 4.

El programa no solo genera los puntos, también genera un polígono (o si somos más exactos un Linear Ring).

Linear Ring conecta el perímetro de los 4 puntos y lo muestra en Google Earth.
El Linear Ring conecta el perímetro de los 4 puntos y se puede cambiar su color de relleno.

Esto lo hace en archivos KML por separado, usted elige si quiere importar un archivo u otro o ambos.

Forma de uso.

python gps2kml.py archivo.csv

Esta instrucción  genera 2 archivos KML:

archivo-puntos.kml
archivo-LR.kml

Hice una prueba y este código me hizo el favor de generar los archivos KML con información de 1800 puntos en un par de segundos  ¡A eso le llamo velocidad!. 

#! /usr/bin/python

import simplekml
import csv
import sys

# nombre del archivo como parametro.
if len(sys.argv) < 2:
    print("")
    print('Falta el archivo csv: gps2kml.py archivo.csv')
    print("")
    sys.exit()

archivocsv = sys.argv[1]
nombre_archivo = archivocsv.split(".")[0]

coordenadas = []
kml = simplekml.Kml()

with open(archivocsv, newline='') as File:
    reader = csv.reader(File)
    for row in reader:

        longlat = row[2], row[1]
        coordenadas.append(longlat)

        kml.newpoint(name=row[0], coords=[longlat])


kml.save(nombre_archivo + '-puntos.kml')

# Generación de un poligono
kml_pol = simplekml.Kml()
pol = kml_pol.newpolygon()

pol.outerboundaryis.coords = coordenadas

kml_pol.save(nombre_archivo + "-LR.kml")

print("puntos y poligono generados.")

Espero que esta información les sea de utilidad, uno nunca sabe.

Para saber más.

6 comentarios en “Generar un archivo KML a partir de coordenadas GPS con Python”

    • Hola Ada,

      No sabes del tema, pues porque no has necesitado saberlo. Pero si algún día se te ofrece colocar muchos puntos en un mapa, ya sabes donde buscar.

      Gracias por tu comentario.

      Responder
    • Hola Luis,

      Python da para todos los gustos, tiene una curva de aprendizaje leve. No soy un experto, pero me gusta el resultado final.

      El código es poco y bastante legible, rápido en ejecución, vamos que tiene sus ventajas. Encuentra algo en que aplicarlo y te va a gustar el resultado.

      Saludos.

      Responder
  1. Es justo lo que buscaba…!!! sin embargo tengo un error porque la version de Python que tengo no reconoce a simplekml ¿Que versión de Python usaste para este código?

    Responder

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: