in mapillary_tools/process_sequence_properties.py [0:0]
def interpolate(sequence: GPXSequence, interpolate_directions: bool) -> GPXSequence:
interpolated: GPXSequence = []
for cur, nex in pairwise(sequence):
# should interpolate or not
if interpolate_directions or cur.angle is None:
new_bearing = compute_bearing(cur.lat, cur.lon, nex.lat, nex.lon)
new_desc = T.cast(
types.ImageDescriptionFile,
{
**cur.desc,
"MAPCompassHeading": {
"TrueHeading": new_bearing,
"MagneticHeading": new_bearing,
},
},
)
interpolated.append(_GPXPoint(new_desc))
else:
interpolated.append(cur)
if interpolated:
assert len(interpolated) == len(sequence) - 1
else:
assert len(sequence) <= 1
# interpolate the last image's angle
# can interpolate or not
if 2 <= len(sequence) and interpolated[-1] is not None:
# should interpolate or not
if interpolate_directions or sequence[-1] is None:
new_desc = T.cast(
types.ImageDescriptionFile,
{
**sequence[-1].desc,
"MAPCompassHeading": {
"TrueHeading": interpolated[-1].angle,
"MagneticHeading": interpolated[-1].angle,
},
},
)
interpolated.append(_GPXPoint(new_desc))
else:
interpolated.append(sequence[-1])
else:
interpolated.append(sequence[-1])
assert len(interpolated) == len(sequence)
return interpolated