Mercurial > hg > nsaunier > traffic-intelligence
comparison python/moving.py @ 113:606010d1d9a4
corrected errors in trajectories (if empty) and getTrajectoryInPolygon
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Mon, 18 Jul 2011 14:29:07 -0400 |
| parents | 6efe470ea5e5 |
| children | 680d4c82886d |
comparison
equal
deleted
inserted
replaced
| 112:67555e968b5e | 113:606010d1d9a4 |
|---|---|
| 204 i.e. a temporal sequence of positions | 204 i.e. a temporal sequence of positions |
| 205 | 205 |
| 206 the class is iterable.''' | 206 the class is iterable.''' |
| 207 | 207 |
| 208 def __init__(self, positions=None): | 208 def __init__(self, positions=None): |
| 209 self.positions = positions | 209 if positions: |
| 210 self.positions = positions | |
| 211 else: | |
| 212 self.positions = [[],[]] | |
| 210 | 213 |
| 211 @staticmethod | 214 @staticmethod |
| 212 def load(line1, line2): | 215 def load(line1, line2): |
| 213 return Trajectory([[float(n) for n in line1.split(' ')], | 216 return Trajectory([[float(n) for n in line1.split(' ')], |
| 214 [float(n) for n in line2.split(' ')]]) | 217 [float(n) for n in line2.split(' ')]]) |
| 232 else: | 235 else: |
| 233 self.iterInstantNum += 1 | 236 self.iterInstantNum += 1 |
| 234 return self[self.iterInstantNum-1] | 237 return self[self.iterInstantNum-1] |
| 235 | 238 |
| 236 def addPositionXY(self, x, y): | 239 def addPositionXY(self, x, y): |
| 237 if not self.positions: | 240 self.positions[0].append(x) |
| 238 self.positions = [[x],[y]] | 241 self.positions[1].append(y) |
| 239 else: | |
| 240 self.positions[0].append(x) | |
| 241 self.positions[1].append(y) | |
| 242 | 242 |
| 243 def addPosition(self, p): | 243 def addPosition(self, p): |
| 244 self.addPositionXY(p.x, p.y) | 244 self.addPositionXY(p.x, p.y) |
| 245 | 245 |
| 246 def draw(self, options = ''): | 246 def draw(self, options = ''): |
| 332 | 332 |
| 333 def getTrajectoryInPolygon(self, polygon): | 333 def getTrajectoryInPolygon(self, polygon): |
| 334 '''Returns the set of points inside the polygon | 334 '''Returns the set of points inside the polygon |
| 335 (array of Nx2 coordinates of the polygon vertices)''' | 335 (array of Nx2 coordinates of the polygon vertices)''' |
| 336 import matplotlib.nxutils as nx | 336 import matplotlib.nxutils as nx |
| 337 t = Trajectory() | 337 traj = Trajectory() |
| 338 result = nx.points_inside_poly(self.asArray().T, polygon) | 338 result = nx.points_inside_poly(self.asArray().T, polygon) |
| 339 for i in xrange(self.length()): | 339 for i in xrange(self.length()): |
| 340 if result[i]: | 340 if result[i]: |
| 341 t.addPositionXY(self.positions[0][i], self.positions[1][i]) | 341 traj.addPositionXY(self.positions[0][i], self.positions[1][i]) |
| 342 if t.length()>0: | 342 return traj |
| 343 return t | |
| 344 else: | |
| 345 return None | |
| 346 | 343 |
| 347 # version 2: use shapely polygon contains | 344 # version 2: use shapely polygon contains |
| 348 | 345 |
| 349 ################## | 346 ################## |
| 350 # Moving Objects | 347 # Moving Objects |
