source: subversion/applications/routing/pyroute-dev/geoPosition.py @ 18454

Last change on this file since 18454 was 18454, checked in by buerste, 10 years ago

-further updates of spaces to tabs

  • Property svn:keywords set to Rev
File size: 3.4 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4"""report "current position" (currently accepts replayed GPX
5files from follow.py)
6
7Usage:
8        pos = geoPosition(filename_of_latlong_file)
9        lat,lon = pos.get()
10"""
11
12__version__ = "$Rev: 18454 $"
13__license__ = """This program is free software: you can redistribute it and/or modify
14it under the terms of the GNU General Public License as published by
15the Free Software Foundation, either version 3 of the License, or
16(at your option) any later version.
17
18This program is distributed in the hope that it will be useful,
19but WITHOUT ANY WARRANTY; without even the implied warranty of
20MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21GNU General Public License for more details.
22
23You should have received a copy of the GNU General Public License
24along with this program. If not, see <http://www.gnu.org/licenses/>."""
25_debug = 0
26
27
28import sys
29import os
30import socket
31from time import sleep
32import re
33
34class geoPosition:
35        def __init__(self):
36                self.mode = "none"
37                try:
38                        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
39                        self.s.connect(("127.0.0.1", 2947))
40                        self.mode = "socket"
41                except socket.error:
42                        print "No GPSD detected, position information will not be available"
43                        pass # leave mode at "none"
44
45                self.filename = os.path.join(os.path.dirname(__file__), "pos.txt")
46                if(os.path.exists(self.filename)):
47                        self.mode = "file"
48                        print "Using %s as position reference" % self.filename
49
50                self.filename = os.path.join(os.path.dirname(__file__), "init_pos.txt")
51                if(os.path.exists(self.filename)):
52                        self.mode = "initfile"
53                        print "Using %s as initial position reference" % self.filename
54
55        def get(self):
56                try:
57                                function = getattr(self, 'get_%s' % self.mode)
58                except AttributeError:
59                                return({'valid':False,'message':"function for %s not defined" % self.mode})
60                return(function())
61
62        def get_none(self):
63                return({'valid':False,'message':"no gps"})
64
65        def socket_cmd(self, cmd):
66                self.s.send("%s\r\n" % cmd)
67                return self.s.recv(8192)
68
69        def test_socket(self):
70                for i in ('i','p','p','p','p'):
71                        print "%s = %s" % (i, self.socket_cmd(i))
72                        sleep(1)
73
74        def get_socket(self):
75                pos = self.socket_cmd("p")
76                p = re.compile('P=(.*?)\s*$')
77                match = p.search(pos)
78                if(match == None):
79                        return({'valid':False,'message':"GPS returned %s" % pos})
80                text = match.group(1)
81                if(text == '?'):
82                        return({'valid':False,'message':"GPS returned P=?"})
83                lat,lon = [float(ll) for ll in text.split(' ')]
84                #print "matched '%s', '%s'"%(lat,lon)
85                return({'valid':True, 'lat':lat, 'lon':lon, 'source':'GPS'})
86
87        def get_file(self):
88                file = open(self.filename, 'r')
89                text = file.readline(50)
90                file.close()
91                try:
92                        lat,lon = [float(i) for i in text.rstrip().split(",")]
93                        return({'valid':True, 'lat':lat, 'lon':lon, 'source':'textfile'})
94                except ValueError:
95                        return({'valid':False, 'message':'Invalid textfile'})
96
97        def get_initfile(self):
98                file = open(self.filename, 'r')
99                text = file.readline(50)
100                file.close()
101                self.mode = "none"
102                try:
103                        lat,lon = [float(i) for i in text.rstrip().split(",")]
104
105                        return({'valid':True, 'lat':lat, 'lon':lon, 'source':'textfile'})
106                except ValueError:
107                        return({'valid':False, 'message':'Invalid textfile'})
108
109if __name__ == "__main__":
110        #print dir(socket)
111        pos = geoPosition()
112        #print pos.test_socket()
113        for i in range(5):
114                print pos.get()
115                sleep(1)
Note: See TracBrowser for help on using the repository browser.