Different straightening algorithm, dist based instead of time based.
Added a 30-meter distance check to prevent big editing disasters but I'm not fully satisfied with this feature yet. I think this is a little better than before though.
This commit is contained in:
parent
a181d67150
commit
2899bb992d
1 changed files with 20 additions and 7 deletions
|
@ -638,21 +638,34 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
|
|||
|
||||
fun straighten_points(a: Trkpt, b: Trkpt)
|
||||
{
|
||||
val al = a.toLocation()
|
||||
val bl = b.toLocation()
|
||||
val subtrack = Track(track.database, track.device_id)
|
||||
subtrack.load_trkpts(trackbook.database.select_trkpt_start_end(
|
||||
track.device_id,
|
||||
start_time=min(a.time, b.time),
|
||||
end_time=max(a.time, b.time),
|
||||
max_accuracy=PreferencesHelper.load_max_accuracy(),
|
||||
))
|
||||
val lat_step = (b.latitude - a.latitude) / (b.time - a.time)
|
||||
val lon_step = (b.longitude - a.longitude) / (b.time - a.time)
|
||||
val ele_step = (b.altitude - a.altitude) / (b.time - a.time)
|
||||
val lat_span = b.latitude - a.latitude
|
||||
val lon_span = b.longitude - a.longitude
|
||||
val ele_span = b.altitude - a.altitude
|
||||
for (trkpt in subtrack.trkpts)
|
||||
{
|
||||
val index = trkpt.time - a.time
|
||||
trkpt.latitude = a.latitude + (index * lat_step)
|
||||
trkpt.longitude = a.longitude + (index * lon_step)
|
||||
trkpt.altitude = a.altitude + (index * ele_step)
|
||||
val new_location = Location("test")
|
||||
val tl = trkpt.toLocation()
|
||||
val dist_a = tl.distanceTo(al)
|
||||
val dist_b = tl.distanceTo(bl)
|
||||
val proportion = dist_a / (dist_a + dist_b)
|
||||
new_location.latitude = a.latitude + (lat_span * proportion)
|
||||
new_location.longitude = a.longitude + (lon_span * proportion)
|
||||
if (trkpt.toLocation().distanceTo(new_location) > 30.0)
|
||||
{
|
||||
continue
|
||||
}
|
||||
trkpt.latitude = new_location.latitude
|
||||
trkpt.longitude = new_location.longitude
|
||||
trkpt.altitude = a.altitude + (ele_span * proportion)
|
||||
trackbook.database.update_trkpt(trkpt, commit=false)
|
||||
}
|
||||
trackbook.database.commit()
|
||||
|
|
Loading…
Reference in a new issue