Source code for geoanonymizer.trajectory.TrajectoryPoint

# -*- coding: utf-8 -*-

"""
:class:`.TrajectoryPoint` represents points in time.
"""

from geopy.point import Point
from geopy.compat import string_compare, py3k


[docs]class TrajectoryPoint(object): # pylint: disable=R0903,R0921 """ Contains a trajectory point, ie. a point in time. Can be iterated over as (timestamp<float>, (latitude<float>, longitude<float>, altitude<float>)). Or one can access the properties `timestamp`, `latitude`, `longitude` or `altitude`. """ __slots__ = ("_timestamp", "_point", "_tuple", "_raw") def __init__(self, timestamp=None, point=None): self._timestamp = timestamp if point is None: self._point = (None, None, None) elif isinstance(point, Point): self._point = point elif isinstance(point, string_compare): self._point = Point(point) elif isinstance(point, (tuple, list)): self._point = Point(point) else: raise TypeError( "point an unsupported type: %r; use %r or Point", type(point), type(string_compare) ) self._tuple = (self._timestamp, (self._point[0], self._point[1], self._point[2])) @property def timestamp(self): """ Timestamp as a float. :rtype: float or None """ return self._timestamp @property def latitude(self): """ Location's latitude. :rtype: float or None """ return self._point[0] @property def longitude(self): """ Location's longitude. :rtype: float or None """ return self._point[1] @property def altitude(self): """ Location's altitude. :rtype: float or None """ return self._point[2] @property def point(self): """ :class:`geopy.point.Point` instance representing the location's latitude, longitude, and altitude. :rtype: :class:`geopy.point.Point` or None """ return self._point if self._point != (None, None, None) else None def __getitem__(self, index): """ Backwards compatibility with geopy<0.98 tuples. """ return self._tuple[index] def __repr__(self): return "TrajectoryPoint(%s, (%s, %s, %s))" % ( self._timestamp, self.latitude, self.longitude, self.altitude ) __unicode__ = __repr__ __str__ = __unicode__ def __iter__(self): return iter(self._tuple) def __eq__(self, other): return ( isinstance(other, TrajectoryPoint) and self._timestamp == other._timestamp and # pylint: disable=W0212 self._point == other._point ) def __ne__(self, other): return not self.__eq__(other) def __len__(self): # pragma: no cover return len(self._tuple)