Mercurial > hg > nsaunier > traffic-intelligence
comparison python/moving.py @ 546:6c0923f1ce68
add some functions for behaviour analysis
| author | MohamedGomaa |
|---|---|
| date | Thu, 03 Jul 2014 14:30:20 -0400 |
| parents | f012a8ad7a0e |
| children | b5525249eda1 |
comparison
equal
deleted
inserted
replaced
| 538:bd1ad468e928 | 546:6c0923f1ce68 |
|---|---|
| 447 def __str__(self): | 447 def __str__(self): |
| 448 return ' '.join([self.__getitem__(i).__str__() for i in xrange(self.length())]) | 448 return ' '.join([self.__getitem__(i).__str__() for i in xrange(self.length())]) |
| 449 | 449 |
| 450 def __repr__(self): | 450 def __repr__(self): |
| 451 return self.__str__() | 451 return self.__str__() |
| 452 | |
| 452 | 453 |
| 453 def __iter__(self): | 454 def __iter__(self): |
| 454 self.iterInstantNum = 0 | 455 self.iterInstantNum = 0 |
| 455 return self | 456 return self |
| 456 | 457 |
| 801 @staticmethod | 802 @staticmethod |
| 802 def minDistance(obj1, obj2, instant): | 803 def minDistance(obj1, obj2, instant): |
| 803 return MovingObject.distances(obj1, obj2, instant).min() | 804 return MovingObject.distances(obj1, obj2, instant).min() |
| 804 | 805 |
| 805 @staticmethod | 806 @staticmethod |
| 807 def distances2(obj1, obj2, instant1,instant2): | |
| 808 from scipy.spatial.distance import cdist | |
| 809 positions1 = [f.getPositionAtInstant(instant1).astuple() for f in obj1.features if f.existsAtInstant(instant1)] | |
| 810 positions2 = [f.getPositionAtInstant(instant2).astuple() for f in obj2.features if f.existsAtInstant(instant2)] | |
| 811 return cdist(positions1, positions2, metric = 'euclidean') | |
| 812 | |
| 813 @staticmethod | |
| 814 def minDistance2(obj1, obj2, instant1,instant2): | |
| 815 return MovingObject.distances2(obj1, obj2, instant1,instant2).min() | |
| 816 | |
| 817 @staticmethod | |
| 806 def maxDistance(obj1, obj2, instant): | 818 def maxDistance(obj1, obj2, instant): |
| 807 return MovingObject.distances(obj1, obj2, instant).max() | 819 return MovingObject.distances(obj1, obj2, instant).max() |
| 808 | 820 |
| 809 def maxSize(self): | 821 def maxSize(self): |
| 810 '''Returns the max distance between features | 822 '''Returns the max distance between features |
| 819 tMaxFeatures = t | 831 tMaxFeatures = t |
| 820 return MovingObject.maxDistance(self, self, tMaxFeatures) | 832 return MovingObject.maxDistance(self, self, tMaxFeatures) |
| 821 else: | 833 else: |
| 822 print('Load features to compute a maximum size') | 834 print('Load features to compute a maximum size') |
| 823 return None | 835 return None |
| 824 | 836 |
| 837 def setRoutes(self,startCode,endCode): | |
| 838 self.startRouteID=startCode | |
| 839 self.endRouteID=endCode | |
| 840 | |
| 825 def getInstantsCrossingLane(self, p1, p2): | 841 def getInstantsCrossingLane(self, p1, p2): |
| 826 '''Returns the instant(s) | 842 '''Returns the instant(s) |
| 827 at which the object passes from one side of the segment to the other | 843 at which the object passes from one side of the segment to the other |
| 828 empty list if there is no crossing''' | 844 empty list if there is no crossing''' |
| 829 indices = self.positions.getIntersections(p1, p2) | 845 indices = self.positions.getIntersections(p1, p2) |
| 940 if areas[userTypename][p.x, p.y] != 0: | 956 if areas[userTypename][p.x, p.y] != 0: |
| 941 possibleUserTypes[userType2Enum[userTypename]] += 1 | 957 possibleUserTypes[userType2Enum[userTypename]] += 1 |
| 942 # what to do: threshold for most common type? self.setUserType() | 958 # what to do: threshold for most common type? self.setUserType() |
| 943 return possibleUserTypes | 959 return possibleUserTypes |
| 944 | 960 |
| 961 | |
| 945 @staticmethod | 962 @staticmethod |
| 946 def collisionCourseDotProduct(movingObject1, movingObject2, instant): | 963 def collisionCourseDotProduct(movingObject1, movingObject2, instant): |
| 947 'A positive result indicates that the road users are getting closer' | 964 'A positive result indicates that the road users are getting closer' |
| 948 deltap = movingObject1.getPositionAtInstant(instant)-movingObject2.getPositionAtInstant(instant) | 965 deltap = movingObject1.getPositionAtInstant(instant)-movingObject2.getPositionAtInstant(instant) |
| 949 deltav = movingObject2.getVelocityAtInstant(instant)-movingObject1.getVelocityAtInstant(instant) | 966 deltav = movingObject2.getVelocityAtInstant(instant)-movingObject1.getVelocityAtInstant(instant) |
