Introducción
Siguiendo con la temática del GPS, y tal y como adelanté en el artículo anterior, Conectar un receptor GPS USB en Ubuntu, mi primer objetivo era conseguir ver los datos proporcionados por el GPS en Google Earth. Luego, el tema lo he ido complicando poco a poco, ahora quiero geolocalizar fotos, pero esto lo dejo para un poco más adelante. El GPS lo teníamos conectado a un netbook, Acer Aspire One, con Ubuntu Natty Narwhal, donde he instalado Google Earth, y conectado mediante un modem USB a una red 3G, que nos permitía actualizar la información de Google Earth, y por supuesto a un GPS. El resultado este:
No se trata de utilizarlo como un navegador GPS, porque lo único que habríamos conseguido era un navegador caro, muy caro, incómodo, y poco práctico, pero para localizar en el plano, en medio del monte, es de gran utilidad. Sobre todo, como era nuestro caso, que teníamos que localizar una base en medio de un campo, a 500 metros de la carretera, y con unas indicaciones que dejaban mucho que desear. Vamos que de otra manera estoy seguro que no lo hubieramos encontrado.
Actualizar la posición en Google Earth
Para actualizar la posición en Google Earth, utilizaremos un archivo intermedio que es el que abriremos en Google Earth, y que servirá de enlace. Para ello creamos un archivo con el nombre que queramos, por ejemplo «enlace.kml», y que contendrá el siguiente código:
En este arhivo, hay que remarcar dos aspectos, el primero es el nombre del archivo que contendrá nuestra posición, y que viene definido por «<href></href>», en mi caso le he llamado «estoy_aqui.kml», y por otro lado está el tiempo de refresco, que en este caso es de 1 segundo.
El registrador de la posición
A partir del script desarrollado en el artículo anterior, y con idea de que lo pueda leer Google Earth, he modificado ligeramente el script para que directamente cree un archivo kml donde guarde la posición en la que nos encontramos. Para ello primero defino una sencilla función que se encargará de crear el archivo y escribir la posición:
A partir del script desarrollado en el artículo anterior, y con idea de que lo pueda leer Google Earth, he modificado ligeramente el script para que directamente cree un archivo kml donde guarde la posición en la que nos encontramos. Para ello primero defino una sencilla función que se encargará de crear el archivo y escribir la posición:
El scritp completo quedaría como:
[python]
#! /usr/local/bin/python #-*- coding: utf-8 -*- import gps, os, time import socket import time def f2i(value): try: return int(value) except: return 0.0 def write_position(longitude,latitude,altitude,speed): speed = f2i(speed * 3.6) range = ( ( speed / 100 ) * 350 ) + 650 tilt = ( ( speed / 120 ) * 43 ) + 30 heading = 0 if speed < 10: range = 200 tilt = 30 heading = 0 output = """<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="https://earth.google.com/kml/2.1"> <Document> <Placemark id="pm123"> <name>%s km/h</name> <LookAt> <longitude>%s</longitude> <latitude>%s</latitude> <range>%s</range> <tilt>%s</tilt> <heading>%s</heading> </LookAt> <Point> <coordinates>%s,%s,%s</coordinates> </Point> </Placemark> </Document> </kml>""" % (speed,longitude,latitude,range,tilt,heading,longitude,latitude,altitude) f=open('estoy_aqui.kml.kml', 'w')
f.write(output) f.close() def main(): g = gps.gps(mode=gps.WATCH_NEWSTYLE) cont = 0 while 1: try: os.system('clear') g.poll() cont += 1 if gps.PACKET_SET: g.stream() print print ' GPS reading' print '—————————————-' print 'latitude ' , g.fix.latitude print 'longitude ' , g.fix.longitude print 'time utc ' , g.utc,' + ', g.fix.time print 'altitude ' , g.fix.altitude print 'epc ' , g.fix.epc print 'epd ' , g.fix.epd print 'eps ' , g.fix.eps print 'epx ' , g.fix.epx print 'epv ' , g.fix.epv print 'ept ' , g.fix.ept print 'speed ' , g.fix.speed print 'climb ' , g.fix.climb print 'track ' , g.fix.track print 'mode ' , g.fix.mode print print 'sats ' , g.satellites write_position(g.fix.longitude,g.fix.latitude,g.fix.altitude,cont) time.sleep(1) except socket.error: print 'error' pass if __name__ == '__main__': main() exit(0)
[/python]
Con esto ya lo tienes, guardas el script con el nombre que quieras, como por ejemplo «readgpsposition.py», le das permiso de ejecución, y lo inicias desde el terminal:
chmod +x readgpsposition.py ./readgpsposition.py
A continuación inicias Google Earth, y abres el archivo «enlace.kml», y directamente verás tu posición. Ya estás dentro de Google Earth. Ten en cuenta que tanto el script, como el enlace tienen que estar en el mismo directorio, para que no hayan problemas.
Conclusiones
Ciertamente, y tal y como indiqué antes, no tiene mucho sentido utilizarlo como navegador GPS, porque además de lo caro que es, y el coste de mantenimiento (por el modem) que tiene, es realmente incómodo de utilizar, tiene que ir el copiloto, todo el tiempo atento a la situación. Ahora, una vez ya tienes tu posición, y la posición de lo que buscas, la localización es realmente sencilla.
Como segundo paso, no ha estado nada mal. El siguiente paso será poder encadenar esto con la captura de fotos georeferenciadas, tipo lo que hace Google, pero mucho más barato. La idea es capturar imágenes de la situación actual, y de la situación final, para poder justificar los trabajos realizados, a la vez que tenemos una referencia de cual era la situación inicial y como se debe quedar finalmente.
Ciertamente, el software libre es increible. Todo lo que he realizado, investigado y probado, está realizado con software libre, gente que de forma altruista cede su trabajo para que otros lo puedan utilizar, esto es la verdadera grandeza. Cada vez que lo pienso me gusta más. Para cualquier cosa que te puedas imaginar (o casi), hay una libreria de Python que te permite hacer lo que necesitas, alguien, que en un momento determinado tuvo la misma inquietud que tu, lo hizo y lo compartió.