Mercurial Hosting > traffic-intelligence
changeset 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 |
files | setup.py trafficintelligence/moving.py trafficintelligence/tests/moving.txt |
diffstat | 3 files changed, 19 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/setup.py Wed Feb 26 22:39:36 2020 -0500 +++ b/setup.py Thu Mar 05 16:20:29 2020 -0500 @@ -5,7 +5,7 @@ setuptools.setup( name='trafficintelligence', - version='0.2.4', + version='0.2.5', author='Nicolas Saunier', author_email='nicolas.saunier@polymtl.ca', url='https://bitbucket.org/Nicolas/trafficintelligence',
--- 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())
--- a/trafficintelligence/tests/moving.txt Wed Feb 26 22:39:36 2020 -0500 +++ b/trafficintelligence/tests/moving.txt Thu Mar 05 16:20:29 2020 -0500 @@ -278,7 +278,8 @@ True >>> len(o13.getFeatures()) 2 ->>> o12 = MovingObject.concatenate(o1, o2, 5) + +>>> o12 = MovingObject.concatenate(o1, o2, 5, minFeatureLength = 6) >>> o12.getTimeInterval() == TimeInterval(o1.getFirstInstant(), o2.getLastInstant()) True >>> v = o12.getVelocityAtInstant(12) @@ -288,6 +289,9 @@ True >>> len(o12.getFeatures()) 3 +>>> f = o12.getFeatures()[-1] +>>> f.length() +6.0 >>> o1 = MovingObject.generate(1, Point(0., 2.), Point(0., 1.), TimeInterval(0,2)) >>> o1.classifyUserTypeSpeedMotorized(0.5, np.median)