def process(self, point): if self._prev_point is None: self._prev_point = point return # if there is no hypothesis, lets see if we far away from the existing endpoint if self._hypothesis_point is None: if not self._endpoint_exists(self._prev_point): self._hypothesis_point = self._prev_point else: self._prev_point = point return ds = distance(self._hypothesis_point, self._prev_point) if ds < self._stationary_distance_threshold: dt = delta_float_time(self._prev_point[0], point[0]) # if we time contribution is large, then shift hypothesis point to the most recent onec if dt > self._current_cumulative_dt: self._hypothesis_point = self._prev_point self._current_cumulative_dt += dt if self._current_cumulative_dt > self._stationary_threshold: self._endpoints.append(self._hypothesis_point) self._hypothesis_point = None self._current_cumulative_dt = 0 else: # moved too far from hypothesis point, reseting self._hypothesis_point = None self._current_cumulative_dt = 0 self._prev_point = point
def process(self, point): if self._from_endpoint_index is None: index = self._get_closest_endpoint_index(point) if index is not None: self._start_route(point, index) return else: dt = delta_float_time(self._current_route[-1][0], point[0]) if dt > self._continuity_threshold: if self._verbose: dist = distance(point, self._endpoints[self._from_endpoint_index]) print('Continuity ruined from %s\n to %s\n dt=%smin, dist=%s' % (trajectory_point_to_str([self._current_route[-1]], 0), trajectory_point_to_str([point], 0), dt/60., dist)) index = self._get_closest_endpoint_index(point) if index == self._from_endpoint_index: if self._verbose: print(' !BUT Didnt move too far from beginning though') self._stop_route() self._start_route(point, index) else: self._stop_route() return self._current_route.append(point) index = self._get_closest_endpoint_index(point) if index == self._from_endpoint_index: if self._verbose: print('made a loop or didnt move') self._stop_route() self._start_route(point, index) elif index == self._to_endpoint_index(): if self._from_endpoint_index == 0: self._AtoB_routes.append(np.array(self._current_route)) if self._verbose: print('A to B found: %s TO %s' % (trajectory_point_to_str(self._current_route, 0), trajectory_point_to_str(self._current_route, len(self._current_route)-1))) self._stop_route() else: self._BtoA_routes.append(np.array(self._current_route)) if self._verbose: print('B to A found: %s TO %s' % (trajectory_point_to_str(self._current_route, 0), trajectory_point_to_str(self._current_route, len(self._current_route)-1))) self._stop_route()
def allow(self, current_p, next_p): dist = distance(current_p, next_p) dt = delta_float_time(current_p[0], next_p[0]) v = ms_to_mph*dist/dt if v > self._speed_threshold: if self._outliers_counter > 0: self._outliers_counter -= 1 return False if dist > self._distance_threshold: if self._outliers_counter > 0: self._outliers_counter -= 1 return False self._outliers_counter = self._max_number_outliers return True
def allow(self, current_p, next_p): dt = delta_float_time(current_p[0], next_p[0]) if dt < 1: return False return True
def get_duration(self): return delta_float_time(self.data[0, 0], self.data[-1, 0])