Is there any GPS library to use in Python?

I am looking for a Python library that can work with GPS coordinates. Say I have a list of coordinates:

>>> gps = [ ... (53.25012925, βˆ’6.24479338, 349.9, '2011-08-20T09:35:00Z'), ... (53.25028285, -6.24441800, 359.9, '2011-08-20T09:35:30Z'), ... (53.25049500, -6.24266032, 395.9, '2011-08-20T09:36:00Z'), ... # and so on... ... ] >>> 

I would like to calculate the average speed, distance, get the highest point and other information. I know this is pretty easy to calculate, but I wonder if any existing code exists (I don't like reinventing the wheel).

Note. There is a similar question here in stackoverflow ( Which gps library would you recommend for python? ), But it's about GPSD. I do not work with any device, I just have GPS coordinates in a text file.

+4
source share
2 answers

I found an interesting library called geopy . It can calculate the distances between two GPS points (it uses the large circle distance and Vincenti distance methods). In addition, geophysics can perform geocoding (it can receive GPS coordinates from an address).

Other functions (average speed, highest point, etc.) I can hack myself.

+2
source

You can still use parts of the GPSD data rather than writing something from scratch. The following code is from a GPSD source and has a module for creating paths from GPS data streams (and then getting the path length and something else)

http://code.google.com/p/python-gpsd/source/browse/src/nmea/track.py

 class Track(object): def __init__(self, recordDelay=10, maxSize=3600, ignoreDuplicates=True, duplicateRange=0.0001): """ Constructor The default values allow for 10 hours worth of data recorded at 10 second intervals. recordDelay - Delay between recording data points maxSize - Maximum number of points to record ignoreDuplicates - Ignore entries that are very similar (ie moved a minimal distance) duplicateRange - Varience range within a duplicate is detected (adjust to account for subtle gps position drift) """ self.recordDelay = recordDelay self.maxSize = maxSize self.ignoreDuplicates = ignoreDuplicates self.duplicateRange = duplicateRange self.positions = [] self.latest = None def append(self, position, heading, timeStamp=None): """ Append position and heading information """ if timeStamp is None: timeStamp = datetime.utcnow() self.latest = (timeStamp, position, heading) if len(self.positions): last = self.positions[0] else: last = None # Make sure we re in range if last is None or (timeStamp - last[0]).seconds >= self.recordDelay: self.positions.insert(0, self.latest) self.latest = None # Clear extra data if len(self.positions) > self.maxSize: pass def clear(self): """ Clear all items from track """ self.positions = [] self.latest = None def __len__(self): """ Return the length of the track """ if self.latest is None: return len(self.positions) return len(self.positions) + 1 def __getslice__(self, i, j): return self.positions[i:j] def __getitem__(self, i): return self.positions[i] def get_latest(self): if self.latest is None and len(self.positions) > 0: return self.positions def get_by_time(self, timeRange, now=datetime.utcnow()): """ Returns the last n items within the time range """ result = [] if self.latest is not None: result.append(self.latest) for position in self.positions: if (now - position[0]).seconds > timeRange: break result.append(position) return result 
+3
source

All Articles