Improve isolate_trkseg feature by querying its endpoints for more.
This commit is contained in:
parent
01a313a69c
commit
1637ef16d6
4 changed files with 46 additions and 8 deletions
|
@ -85,11 +85,11 @@ class Database(val trackbook: Trackbook)
|
|||
connection.insert("trkpt", null, values)
|
||||
}
|
||||
|
||||
fun select_trkpt_start_end(device_id: String, start_time: Long, end_time: Long): Iterator<Trkpt>
|
||||
fun select_trkpt_start_end(device_id: String, start_time: Long, end_time: Long, order: String="ASC"): Iterator<Trkpt>
|
||||
{
|
||||
Log.i("VOUSSOIR", "Track.trkpt_generator: Querying points between ${start_time} -- ${end_time}.")
|
||||
return _trkpt_generator(this.connection.rawQuery(
|
||||
"SELECT device_id, lat, lon, time, provider, ele, accuracy, sat FROM trkpt WHERE device_id = ? AND time >= ? AND time <= ? ORDER BY time ASC",
|
||||
"SELECT device_id, lat, lon, time, provider, ele, accuracy, sat FROM trkpt WHERE device_id = ? AND time >= ? AND time <= ? ORDER BY time ${order}",
|
||||
arrayOf(device_id, start_time.toString(), end_time.toString())
|
||||
))
|
||||
}
|
||||
|
|
|
@ -36,10 +36,42 @@ data class Track (
|
|||
var name: String = "",
|
||||
var _start_time: Long = 0L,
|
||||
var _end_time: Long = 0L,
|
||||
val trkpts: ArrayList<Trkpt> = ArrayList<Trkpt>(),
|
||||
val trkpts: ArrayDeque<Trkpt> = ArrayDeque<Trkpt>(),
|
||||
var trackFormatVersion: Int = Keys.CURRENT_TRACK_FORMAT_VERSION,
|
||||
)
|
||||
{
|
||||
/**
|
||||
* Discover the true bounds of this trkseg by querying for points until the stop over threshold.
|
||||
* This is extremely helpful when using the "when was I here" button on an area, then expanding
|
||||
* the trkseg to its ends.
|
||||
*/
|
||||
fun expand_to_trkseg_bounds()
|
||||
{
|
||||
if (trkpts.isEmpty())
|
||||
{
|
||||
return
|
||||
}
|
||||
var previous = trkpts.first()
|
||||
for (trkpt in database.select_trkpt_start_end(device_id, start_time=0L, end_time=trkpts.first().time, order="DESC"))
|
||||
{
|
||||
if ((previous.time - trkpt.time) > Keys.STOP_OVER_THRESHOLD)
|
||||
{
|
||||
break
|
||||
}
|
||||
trkpts.addFirst(trkpt)
|
||||
previous = trkpt
|
||||
}
|
||||
previous = trkpts.last()
|
||||
for (trkpt in database.select_trkpt_start_end(device_id, start_time=trkpts.last().time, end_time=Long.MAX_VALUE, order="ASC"))
|
||||
{
|
||||
if ((trkpt.time - previous.time) > Keys.STOP_OVER_THRESHOLD)
|
||||
{
|
||||
break
|
||||
}
|
||||
trkpts.add(trkpt)
|
||||
previous = trkpt
|
||||
}
|
||||
}
|
||||
fun export_gpx(context: Context, fileuri: Uri): Uri?
|
||||
{
|
||||
if (! database.ready)
|
||||
|
@ -133,7 +165,7 @@ data class Track (
|
|||
}
|
||||
|
||||
data class TrackStatistics(
|
||||
val trkpts: ArrayList<Trkpt>,
|
||||
val trkpts: ArrayDeque<Trkpt>,
|
||||
var distance: Double = 0.0,
|
||||
var duration: Long = 0,
|
||||
var pause_duration: Long = 0,
|
||||
|
|
|
@ -311,6 +311,9 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
|
|||
(polyline.actualPoints.first() as Trkpt).time,
|
||||
(polyline.actualPoints.last() as Trkpt).time,
|
||||
))
|
||||
|
||||
track.expand_to_trkseg_bounds()
|
||||
|
||||
set_datetimes_from_track()
|
||||
render_track()
|
||||
}
|
||||
|
@ -468,10 +471,7 @@ class TrackFragment : Fragment(), MapListener, YesNoDialog.YesNoDialogListener
|
|||
delete_selected_trkpt_button.visibility = View.VISIBLE
|
||||
use_trkpt_as_start_button.visibility = View.VISIBLE
|
||||
use_trkpt_as_end_button.visibility = View.VISIBLE
|
||||
if (track_segment_overlays.size > 1)
|
||||
{
|
||||
isolate_trkseg_button.visibility = View.VISIBLE
|
||||
}
|
||||
return
|
||||
}
|
||||
})
|
||||
|
|
|
@ -20,6 +20,7 @@ import android.location.Location
|
|||
import org.osmdroid.util.GeoPoint
|
||||
import org.osmdroid.views.overlay.Polyline
|
||||
import net.voussoir.trkpt.helpers.getNumberOfSatellites
|
||||
import net.voussoir.trkpt.helpers.iso8601_local
|
||||
|
||||
class Trkpt(
|
||||
val device_id: String,
|
||||
|
@ -53,4 +54,9 @@ class Trkpt(
|
|||
location.time = this.time
|
||||
return location
|
||||
}
|
||||
|
||||
override fun toString(): String
|
||||
{
|
||||
return "${device_id} ${iso8601_local(time)} ${latitude}/${longitude}"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue