¿Hay alguna biblioteca de GPS para usar en Python?

Estoy buscando la biblioteca de Python, que puede trabajar con coordenadas GPS. Digamos, tengo una lista de coordenadas:

>>> 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... ... ] >>> 

Me gustaría calcular la velocidad media, la distancia, obtener el punto más alto y otra información. Lo sé, es bastante simple calcularlo, pero me pregunto si hay algún código existente (no me gusta reinventar la rueda).

Nota: Hay una pregunta similar aquí en stackoverflow ( ¿Qué biblioteca de gps recomendaría para python? ), Pero se trata de GPSD. No estoy trabajando con ningún dispositivo, solo tengo coordenadas GPS en un archivo de texto.

Es posible que aún puedas usar partes de datos de GPSD, en lugar de escribir algo desde cero. El siguiente código proviene de la fuente GPSD y tiene un módulo para crear rutas a partir de flujos de datos GPS (y luego obtener la longitud de la ruta y otras cosas)

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 

He encontrado una interesante biblioteca llamada Geopy . Puede calcular distancias entre dos puntos de GPS (utiliza métodos de distancia de círculo grande y distancia de Vincenty). Además de eso, Geopy puede hacer geoencoding (puede obtener coordenadas GPS de una dirección).

Las otras características (velocidad media, punto más alto, etc.) las puedo hackear yo mismo.