Is there any GPS library for use in Python?

别等时光非礼了梦想. 提交于 2019-11-30 18:00:28

问题


I am looking for Python library, which can work with GPS coordinates. Let's 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 compute average speed, distance, get the higest point, and other info. I know, it is quite simple to compute it, but I am wondering if there is any existing code (I do not like to reinvent the wheel).

Note: There is similar question here in stackoverflow (Which gps library would you recommend for python?), but it is about GPSD. I am not working with any device, I just have GPS coordinates in text file.


回答1:


You may still be able to use data portions of GPSD, rather than writing something from scratch. The following code is from the GPSD source and has a module for making paths from streams of GPS data (and then getting the path length and whatnot)

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



回答2:


I have found an interesting library named geopy. It can calculate distances between two GPS points (it uses great-circle distance and Vincenty distance methods). On top of that, geopy can do geocoding (it can get GPS coordinates from an address).

The other features (average speed, higest point, etc.) I can hack by myself.



来源:https://stackoverflow.com/questions/7346453/is-there-any-gps-library-for-use-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!