Mercurial Hosting > traffic-intelligence
diff trafficintelligence/moving.py @ 1134:4b2a55d570c1
resolve issue for short features when merging objects manually
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 05 Mar 2020 16:20:29 -0500 |
parents | c4d9c270f999 |
children | 342701cdac30 |
line wrap: on
line diff
--- a/trafficintelligence/moving.py Wed Feb 26 22:39:36 2020 -0500 +++ b/trafficintelligence/moving.py Thu Mar 05 16:20:29 2020 -0500 @@ -1299,11 +1299,13 @@ inter, self.positions, self.velocities = MovingObject.aggregateTrajectories(self.features, self.getTimeInterval()) @staticmethod - def concatenate(obj1, obj2, num = None, newFeatureNum = None, computePositions = False): + def concatenate(obj1, obj2, num = None, newFeatureNum = None, minFeatureLength = 5): '''Concatenates two objects, whether overlapping temporally or not - Positions will be recomputed only if computePositions is True - Otherwise, only featureNumbers and/or features will be merged''' + Positions will be recomputed features are merged + Otherwise, only featureNumbers and/or features will be merged + minFeatureLength enforces a minimum length to avoid small features + (and smaller velocities that are not saved)''' if num is None: newNum = obj1.getNum() else: @@ -1331,8 +1333,13 @@ featureVelocities.addPosition(v) p=p+v for t in secondObject.getTimeInterval(): - positions.addPosition(secondObject.getPositionAtInstant(t)) - velocities.addPosition(secondObject.getVelocityAtInstant(t)) + p = secondObject.getPositionAtInstant(t) + v = secondObject.getVelocityAtInstant(t) + positions.addPosition(p) + velocities.addPosition(v) + if featurePositions.length() < minFeatureLength: + featurePositions.addPosition(p) + featureVelocities.addPosition(v) newObject = MovingObject(newNum, TimeInterval(firstObject.getFirstInstant(), secondObject.getLastInstant()), positions, velocities, nObjects = 1) if hasattr(obj1, 'featureNumbers') and hasattr(obj2, 'featureNumbers'): if newFeatureNum is not None: @@ -1340,7 +1347,7 @@ else: print('Issue, new created feature has no num id') if obj1.hasFeatures() and obj2.hasFeatures(): - newObject.features = obj1.getFeatures()+obj2.getFeatures()+[MovingObject(newFeatureNum, TimeInterval(emptyInterval.first+1, emptyInterval.last-1), featurePositions, featureVelocities)] + newObject.features = obj1.getFeatures()+obj2.getFeatures()+[MovingObject(newFeatureNum, TimeInterval(emptyInterval.first+1, emptyInterval.first+featurePositions.length()), featurePositions, featureVelocities)] newObject.updatePositions() else: # time intervals overlap newTimeInterval = TimeInterval.union(obj1.getTimeInterval(), obj2.getTimeInterval())