def calculate_current_cog_and_sog(self): point1 = self.traj.get_start_location() point2 = self.traj.get_end_location() t1 = self.traj.get_start_time() t2 = self.traj.get_end_time() cog_deg = calculate_initial_compass_bearing(point1, point2) dist_meters = measure_distance_spherical(point1, point2) meters_per_sec = dist_meters / (t2 - t1).total_seconds() return [cog_deg, meters_per_sec]
def _is_moving_sufficiently(self, traj, min_meters_per_sec, past_timedelta): line_coords = traj.to_linestring().coords covered_distance = measure_distance_spherical(Point(line_coords[0]), Point(line_coords[-1])) if covered_distance < 0.5 * min_meters_per_sec * past_timedelta.total_seconds( ): return False else: return True
def compute_speed(self, row): pt0 = row['prev_pt'] pt1 = row['geometry'] if type(pt0) != Point: return 0.0 if pt0 == pt1: return 0.0 if self.crs == '4326': dist_meters = measure_distance_spherical(pt0, pt1) else: # The following distance will be in CRS units that might not be meters! dist_meters = measure_distance_euclidean(pt0, pt1) return dist_meters / row['delta_t'].total_seconds()
def _compute_distance(self, row): pt0 = row['prev_pt'] pt1 = row['geometry'] if type(pt0) != Point: return 0.0 if pt0 == pt1: return 0.0 if self.is_latlon(): dist_meters = measure_distance_spherical(pt0, pt1) else: # The following distance will be in CRS units that might not be meters! dist_meters = measure_distance_euclidean(pt0, pt1) return dist_meters
def _compute_speed(self, row): pt0 = row['prev_pt'] pt1 = row['geometry'] if type(pt0) != Point: return 0.0 if type(pt1) != Point: raise ValueError('Invalid trajectory! Got {} instead of point!'.format(pt1)) if pt0 == pt1: return 0.0 if self.is_latlon(): dist_meters = measure_distance_spherical(pt0, pt1) else: # The following distance will be in CRS units that might not be meters! dist_meters = measure_distance_euclidean(pt0, pt1) return dist_meters / row['delta_t'].total_seconds()
def test_dist_error_latlon(self): df = pd.DataFrame([{ 'geometry': Point(0, 0), 't': datetime(2018, 1, 1, 12, 0, 0) }, { 'geometry': Point(0, 10), 't': datetime(2018, 1, 1, 12, 0, 1) }]).set_index('t') geo_df = GeoDataFrame(df, crs={'init': 'epsg:4326'}) true_traj = Trajectory(1, geo_df) true_pos = Point(0, 10) predicted_pos = Point(0, 9) dummy_td = timedelta(seconds=1) sample = TrajectorySample(0, dummy_td, dummy_td, dummy_td, None, true_pos, true_traj) evaluator = TrajectoryPredictionEvaluator(sample, predicted_pos, 'epsg:25832', 'epsg:4326') result = evaluator.get_distance_error() expected_result = measure_distance_spherical(true_pos, predicted_pos) self.assertAlmostEqual(result, expected_result, 3)
def get_along_track_error(self): return measure_distance_spherical(self.truth, self.projected_prediction)
def get_cross_track_error(self): return measure_distance_spherical(self.prediction, self.projected_prediction)
def get_distance_error(self): return measure_distance_spherical(self.truth, self.prediction)
def get_distance_error(self): if self.input_crs.is_latlong(): return measure_distance_spherical(self.truth, self.prediction) else: return measure_distance_euclidean(self.truth, self.prediction)