comparison trafficintelligence/moving.py @ 1079:845d694af7b8

reversed minor bug
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 20 Jul 2018 16:36:42 -0400
parents 3939ae415be0
children 346b41cbc81a
comparison
equal deleted inserted replaced
1078:8cc3feb1c1c5 1079:845d694af7b8
1159 self.setNObjects(nObjects) # a feature has None for nObjects 1159 self.setNObjects(nObjects) # a feature has None for nObjects
1160 self.features = None 1160 self.features = None
1161 # compute bounding polygon from trajectory 1161 # compute bounding polygon from trajectory
1162 1162
1163 @staticmethod 1163 @staticmethod
1164 def cropedTimeInterval(obj, value, after = True): 1164 def croppedTimeInterval(obj, value, after = True):
1165 newTimeInterval = TimeInterval(obj.getFirstInstant(), min(value, obj.getLastInstant())) if after else TimeInterval(max(obj.getFirstInstant(), value), obj.getLastInstant()) 1165 newTimeInterval = TimeInterval(obj.getFirstInstant(), min(value, obj.getLastInstant())) if after else TimeInterval(max(obj.getFirstInstant(), value), obj.getLastInstant())
1166 if obj.positions is not None : 1166 if obj.positions is not None :
1167 newPositions = obj.positions[slice(newTimeInterval.first, newTimeInterval.last+1)] 1167 newPositions = obj.positions[slice(newTimeInterval.first, newTimeInterval.last+1)]
1168 else: 1168 else:
1169 newPositions = None 1169 newPositions = None
1170 if obj.velocities is not None : 1170 if obj.velocities is not None :
1171 newVelocities = obj.velocities[slice(newTimeInterval.first, newTimeInterval.last+1)] 1171 newVelocities = obj.velocities[slice(newTimeInterval.first, newTimeInterval.last+1)]
1172 else: 1172 else:
1173 newVelocities = None 1173 newVelocities = None
1174 if obj.features is not None : 1174 if obj.hasFeatures():
1175 newFeatures = [f.cropedTimeInterval(value, after) for f in obj.features] 1175 newFeatures = [f.croppedTimeInterval(value, after) for f in obj.features]
1176 else: 1176 else:
1177 newFeatures = None 1177 newFeatures = None
1178 res = MovingObject(obj.getNum(), newTimeInterval, newPositions, newVelocities, obj.geometry, obj.userType, obj.nObjects) 1178 res = MovingObject(obj.getNum(), newTimeInterval, newPositions, newVelocities, obj.geometry, obj.userType, obj.nObjects)
1179 res.features = newFeatures 1179 res.features = newFeatures
1180 res.featureNumbers = obj.featureNumbers 1180 res.featureNumbers = obj.featureNumbers
1181 if hasattr(obj, 'projectedPositions'): 1181 #if hasattr(obj, 'projectedPositions'):
1182 res.projectedPositions = obj.projectedPositions[slice(newTimeInterval.first, newTimeInterval.last+1)] 1182 # res.projectedPositions = obj.projectedPositions[slice(newTimeInterval.first, newTimeInterval.last+1)]
1183 return res 1183 return res
1184 1184
1185 1185
1186 @staticmethod 1186 @staticmethod
1187 def aggregateTrajectories(features, interval = None, aggFunc = mean): 1187 def aggregateTrajectories(features, interval = None, aggFunc = mean):
1222 else: 1222 else:
1223 newNum = num 1223 newNum = num
1224 commonTimeInterval = obj1.commonTimeInterval(obj2) 1224 commonTimeInterval = obj1.commonTimeInterval(obj2)
1225 if commonTimeInterval.empty(): 1225 if commonTimeInterval.empty():
1226 #print('The two objects\' time intervals do not overlap: obj1 {} and obj2 {}'.format(obj1.getTimeInterval(), obj2.getTimeInterval())) 1226 #print('The two objects\' time intervals do not overlap: obj1 {} and obj2 {}'.format(obj1.getTimeInterval(), obj2.getTimeInterval()))
1227 emptyInterval = TimeInterval(min(obj1.getLastInstant(),obj2.getLastInstant()), max(obj1.getFirstInstant(),obj2.getFirstInstant())+1) 1227 emptyInterval = TimeInterval(min(obj1.getLastInstant(),obj2.getLastInstant()), max(obj1.getFirstInstant(),obj2.getFirstInstant()))
1228 if obj1.existsAtInstant(emptyInterval.last): 1228 if obj1.existsAtInstant(emptyInterval.last):
1229 firstObject = obj2 1229 firstObject = obj2
1230 secondObject = obj1 1230 secondObject = obj1
1231 else: 1231 else:
1232 firstObject = obj1 1232 firstObject = obj1
1235 positions = copy.deepcopy(firstObject.getPositions()) 1235 positions = copy.deepcopy(firstObject.getPositions())
1236 velocities = copy.deepcopy(firstObject.getPositions()) 1236 velocities = copy.deepcopy(firstObject.getPositions())
1237 featurePositions = Trajectory() 1237 featurePositions = Trajectory()
1238 featureVelocities = Trajectory() 1238 featureVelocities = Trajectory()
1239 p = firstObject.getPositionAtInstant(emptyInterval.first)+v 1239 p = firstObject.getPositionAtInstant(emptyInterval.first)+v
1240 for t in range(emptyInterval.first+1, emptyInterval.last+1): 1240 for t in range(emptyInterval.first+1, emptyInterval.last):
1241 positions.addPosition(p) 1241 positions.addPosition(p)
1242 velocities.addPosition(v) 1242 velocities.addPosition(v)
1243 featurePositions.addPosition(p) 1243 featurePositions.addPosition(p)
1244 featureVelocities.addPosition(v) 1244 featureVelocities.addPosition(v)
1245 p=p+v 1245 p=p+v