From b5914dd492fa4716737bbe43f4abcad5258b6396 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Fri, 4 May 2012 17:59:13 +0100 Subject: working with image maps --- gpspoller.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 gpspoller.py (limited to 'gpspoller.py') diff --git a/gpspoller.py b/gpspoller.py new file mode 100644 index 0000000..6f7c19c --- /dev/null +++ b/gpspoller.py @@ -0,0 +1,88 @@ +#!/usr/bin/python + +# Copyright (C) 2007 by Jaroslaw Zachwieja +# Modified (C) 2012 by Tim Redfern +# Published under the terms of GNU General Public License v2 or later. +# License text available at http://www.gnu.org/licenses/licenses.html#GPL + +import serial,string,threading,time,sys,random + +class GpsPoller(threading.Thread): + + latitude = 0 + longitude = 0 + changed = False + + def __init__(self,port,test=False): + self.test=test + self.port=port + self.gps = serial.Serial(port, 9600, timeout=1) + threading.Thread.__init__(self) + + def check(self): + if self.changed: + self.changed=False + return (self.latitude,self.longitude) + else: + return False + + def run(self): + if self.test: + print "GpsPoller: serving random data" + else: + print "GpsPoller: serving data from",self.port + try: + while True: + if self.test: + self.latitude=random.random()*90 + self.longitude=random.random()*90 + self.changed=True + time.sleep(0.5) + else: + line = self.gps.read(1) + line = line+self.gps.readline() + datablock = line.split(',') + + if line[0:6] == '$GPRMC': + latitude_in = string.atof(datablock[3]) + longitude_in = string.atof(datablock[5]) + altitude = string.atof(datablock[8]) + speed_in = string.atof(datablock[7]) + heading = string.atof(datablock[8]) + + if datablock[4] == 'S': + latitude_in = -latitude_in + if datablock[6] == 'W': + longitude_in = -longitude_in + + latitude_degrees = int(latitude_in/100) + latitude_minutes = latitude_in - latitude_degrees*100 + + longitude_degrees = int(longitude_in/100) + longitude_minutes = longitude_in - longitude_degrees*100 + + latitude = latitude_degrees + (latitude_minutes/60) + longitude = longitude_degrees + (longitude_minutes/60) + + if latitude!=self.latitude or longitude!=self.longitude: + self.latitude=latitude + self.longitude=longitude + self.changed=True + + + except StopIteration: + pass + + def __del__(): + self.gps.close() + +if __name__ == '__main__': + + gpsp = GpsPoller(sys.argv[1]) + gpsp.start() + while 1: + # In the main thread, every 5 seconds print the current value + time.sleep(0.1) + check=gpsp.check() + if check!=False: + print "changed:",check[0],check[1] -- cgit v1.2.3