Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
new_latitude = SMOOTHING_RATIO[0] * latitudes[i - 1] + \
SMOOTHING_RATIO[1] * latitudes[i] + \
SMOOTHING_RATIO[2] * latitudes[i + 1]
old_longitude = self.points[i].longitude
new_longitude = SMOOTHING_RATIO[0] * longitudes[i - 1] + \
SMOOTHING_RATIO[1] * longitudes[i] + \
SMOOTHING_RATIO[2] * longitudes[i + 1]
if not remove_extremes:
self.points[i].latitude = new_latitude
self.points[i].longitude = new_longitude
# TODO: This is not ideal.. Because if there are points A, B and C on the same
# line but B is very close to C... This would remove B (and possibly) A even though
# it is not an extreme. This is the reason for this algorithm:
d1 = mod_geo.distance(latitudes[i - 1], longitudes[i - 1], None, latitudes[i], longitudes[i], None)
d2 = mod_geo.distance(latitudes[i + 1], longitudes[i + 1], None, latitudes[i], longitudes[i], None)
d = mod_geo.distance(latitudes[i - 1], longitudes[i - 1], None, latitudes[i + 1], longitudes[i + 1], None)
#print d1, d2, d, remove_extremes
if d1 + d2 > d * 1.5 and remove_extremes:
d = mod_geo.distance(old_latitude, old_longitude, None, new_latitude, new_longitude, None)
#print "d, threshold = ", d, remove_2d_extremes_threshold
if d < remove_2d_extremes_threshold:
new_point = self.points[i]
else:
#print 'removed 2d'
point_removed = True
else:
new_point = self.points[i]
SMOOTHING_RATIO[2] * latitudes[i + 1]
old_longitude = self.points[i].longitude
new_longitude = SMOOTHING_RATIO[0] * longitudes[i - 1] + \
SMOOTHING_RATIO[1] * longitudes[i] + \
SMOOTHING_RATIO[2] * longitudes[i + 1]
if not remove_extremes:
self.points[i].latitude = new_latitude
self.points[i].longitude = new_longitude
# TODO: This is not ideal.. Because if there are points A, B and C on the same
# line but B is very close to C... This would remove B (and possibly) A even though
# it is not an extreme. This is the reason for this algorithm:
d1 = mod_geo.distance(latitudes[i - 1], longitudes[i - 1], None, latitudes[i], longitudes[i], None)
d2 = mod_geo.distance(latitudes[i + 1], longitudes[i + 1], None, latitudes[i], longitudes[i], None)
d = mod_geo.distance(latitudes[i - 1], longitudes[i - 1], None, latitudes[i + 1], longitudes[i + 1], None)
#print d1, d2, d, remove_extremes
if d1 + d2 > d * 1.5 and remove_extremes:
d = mod_geo.distance(old_latitude, old_longitude, None, new_latitude, new_longitude, None)
#print "d, threshold = ", d, remove_2d_extremes_threshold
if d < remove_2d_extremes_threshold:
new_point = self.points[i]
else:
#print 'removed 2d'
point_removed = True
else:
new_point = self.points[i]
if new_point and not point_removed:
new_track_points.append(new_point)
SMOOTHING_RATIO[1] * latitudes[i] + \
SMOOTHING_RATIO[2] * latitudes[i + 1]
old_longitude = self.points[i].longitude
new_longitude = SMOOTHING_RATIO[0] * longitudes[i - 1] + \
SMOOTHING_RATIO[1] * longitudes[i] + \
SMOOTHING_RATIO[2] * longitudes[i + 1]
if not remove_extremes:
self.points[i].latitude = new_latitude
self.points[i].longitude = new_longitude
# TODO: This is not ideal.. Because if there are points A, B and C on the same
# line but B is very close to C... This would remove B (and possibly) A even though
# it is not an extreme. This is the reason for this algorithm:
d1 = mod_geo.distance(latitudes[i - 1], longitudes[i - 1], None, latitudes[i], longitudes[i], None)
d2 = mod_geo.distance(latitudes[i + 1], longitudes[i + 1], None, latitudes[i], longitudes[i], None)
d = mod_geo.distance(latitudes[i - 1], longitudes[i - 1], None, latitudes[i + 1], longitudes[i + 1], None)
#print d1, d2, d, remove_extremes
if d1 + d2 > d * 1.5 and remove_extremes:
d = mod_geo.distance(old_latitude, old_longitude, None, new_latitude, new_longitude, None)
#print "d, threshold = ", d, remove_2d_extremes_threshold
if d < remove_2d_extremes_threshold:
new_point = self.points[i]
else:
#print 'removed 2d'
point_removed = True
else:
new_point = self.points[i]
if new_point and not point_removed:
points = [previous_point]
old_latitude, old_longitude, old_elevation = (
previous_point.latitude,
previous_point.longitude,
previous_point.elevation,
)
count = 1
next_distance = distance
section_distance = 0
for point in iterator:
point = add_extension_data(point) # set: point.extension_data dict
points.append(point)
latitude, longitude, elevation = point.latitude, point.longitude, point.elevation
point_distance = geo_distance(old_latitude, old_longitude, old_elevation, latitude, longitude, elevation)
previous_section_distance = section_distance
section_distance += point_distance
old_latitude, old_longitude, old_elevation = latitude, longitude, elevation
if section_distance >= next_distance:
# Calculate the deviation from the ideal distance:
current_difference = section_distance - next_distance
previous_difference = abs(previous_section_distance - next_distance)
print(
"no. %03i: previous point %.1fm diff: %.1fm vs. current point %.1fm diff: %.1fm"
% (count, previous_section_distance, previous_difference, section_distance, current_difference)
)
previous_point = next(iterator)
old_latitude, old_longitude, old_elevation = (
previous_point.latitude,
previous_point.longitude,
previous_point.elevation,
)
count = 1
next_distance = distance
total_distance = 0
for point in iterator:
latitude, longitude, elevation = point.latitude, point.longitude, point.elevation
previous_total_distance = total_distance
total_distance += geo_distance(old_latitude, old_longitude, old_elevation, latitude, longitude, elevation)
old_latitude, old_longitude, old_elevation = latitude, longitude, elevation
if total_distance >= next_distance:
# Calculate the deviation from the ideal distance:
current_difference = total_distance - next_distance
previous_difference = abs(previous_total_distance - next_distance)
print(
"no. %03i: previous point %.1fm diff: %.1fm vs. current point %.1fm diff: %.1fm"
% (count, previous_total_distance, previous_difference, total_distance, current_difference)
)
# We didn't use the >count< for resulting kilometers:
# Maybe the point density is very low and the real distance is greater than kilometers ;)
if not remove_extremes:
self.points[i].latitude = new_latitude
self.points[i].longitude = new_longitude
# TODO: This is not ideal.. Because if there are points A, B and C on the same
# line but B is very close to C... This would remove B (and possibly) A even though
# it is not an extreme. This is the reason for this algorithm:
d1 = mod_geo.distance(latitudes[i - 1], longitudes[i - 1], None, latitudes[i], longitudes[i], None)
d2 = mod_geo.distance(latitudes[i + 1], longitudes[i + 1], None, latitudes[i], longitudes[i], None)
d = mod_geo.distance(latitudes[i - 1], longitudes[i - 1], None, latitudes[i + 1], longitudes[i + 1], None)
#print d1, d2, d, remove_extremes
if d1 + d2 > d * 1.5 and remove_extremes:
d = mod_geo.distance(old_latitude, old_longitude, None, new_latitude, new_longitude, None)
#print "d, threshold = ", d, remove_2d_extremes_threshold
if d < remove_2d_extremes_threshold:
new_point = self.points[i]
else:
#print 'removed 2d'
point_removed = True
else:
new_point = self.points[i]
if new_point and not point_removed:
new_track_points.append(new_point)
new_track_points.append(self.points[- 1])
#print 'len=', len(new_track_points)