Source code for leuvenmapmatching.util.segment

# encoding: utf-8
"""
leuvenmapmatching.util.segment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:author: Wannes Meert
:copyright: Copyright 2015-2018 DTAI, KU Leuven and Sirris.
:license: Apache License, Version 2.0, see LICENSE for details.
"""
import logging


logger = logging.getLogger("be.kuleuven.cs.dtai.mapmatching")


[docs]class Segment(object): """Segment in the graph and its interpolated point.""" __slots__ = ["l1", "p1", "l2", "p2", "_pi", "_ti"] def __init__(self, l1, p1, l2=None, p2=None, pi=None, ti=None): """Create a new segment. :param l1: Label of the node that is the start of the segment. :param p1: Point (coordinate) of the start node. :param l2: Label of the node that is the end of the segment. :param p2: Point (coordinate) of the end node. :param pi: Interpolated point. The point that is the best match and can be in between p1 and p2. :param ti: Position of pi on the segment [p1,p2], thus pi = p1+t1*(p2-p1). """ self.l1 = l1 # Start of segment, label self.p1 = p1 # point self.l2 = l2 # End of segment, if None the segment is a point self.p2 = p2 self.pi = pi # Interpolated point self.ti = ti # Position on segment p1-p2 @property def label(self): if self.l2 is None: return self.l1 return f"{self.l1}-{self.l2}" @property def rlabel(self): if self.l2 is None: return self.l1 return f"{self.l2}-{self.l1}" @property def key(self): if self.l2 is None: return self.l1 return f"{self.l1}-{self.l2}" @property def pi(self): if self.p2 is None: return self.p1 return self._pi @pi.setter def pi(self, value): if value is not None and len(value) > 2: self._pi = tuple(value[:2]) else: self._pi = value @property def ti(self): if self.p2 is None: return 0 return self._ti @ti.setter def ti(self, value): self._ti = value def is_point(self): return self.p2 is None def last_point(self): if self.p2 is None: return self.p1 return self.p2 def loc_to_str(self): if self.p2 is None: return f"{self.p1}" if self._pi is not None: return f"{self.p1}-{self.pi}/{self.ti}-{self.p2}" return f"{self.p1}-{self.p2}" def __str__(self): if self.p2 is None: return f"{self.l1}" if self._pi is not None: return f"{self.l1}-i-{self.l2}" return f"{self.l1}-{self.l2}" def __repr__(self): return "Segment<" + self.__str__() + ">"