WhereWasI
Given a GPX data file and a time reference, infer a location.
API documentation is available on rubydoc.org.
Examples
w = WhereWasI::Gpx.new(gpx_file: '/home/alex/track.gpx')
w.at('2014-01-01T00:00:00Z')
#=> {lat: 48.0, lon: 98.0, elevation: 1000}
By default, at
will return nil
if the supplied time is not covered by the GPX data.
This includes times before the earliest data or after the last data, or times that
fall in-between GPX segments. (Like if your GPS receiver was turned off for a few
minutes.)
w = WhereWasI::Gpx.new(gpx_file: '/home/alex/track.gpx')
w.at('2014-01-02T00:00:00Z')
#=> nil
Inter-segment Behavior
For times that fall outside any segments, you can opt to guess about a location
in a few different ways, instead of returning nil
.
Interpolation
If you would like to interpolate a location using the ending and beginning locations of the nearest segments, do the following:
w = WhereWasI::Gpx.new(
gpx_file: '/home/alex/track.gpx',
intersegment_behavior: :interpolate
)
w.at('2014-01-02T00:00:00Z')
Nearest
Interpolating will give impossible results if a large distance exists between two segments. In those cases, simply selecting the location of segment begin/end which is nearest in time may be preferable.
w = WhereWasI::Gpx.new(
gpx_file: '/home/alex/track.gpx',
intersegment_behavior: :nearest
)
w.at('2014-01-02T00:00:00Z')