alidiepuit / osmtracker-android

Automatically exported from code.google.com/p/osmtracker-android
GNU General Public License v3.0
0 stars 0 forks source link

Waypoints in wrong place when marking while moving #35

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Start tracking, move @50+ km/h
2. Mark some waypoints when you drive besides them
3. Compare the real position of waypoints with their position in the track.
Position will be WAY close to the beginning of track (50-200+ m) than it is
in the reality. 

What is the expected output? What do you see instead?
Positions inaccurate to <10-20m, i.e. distance between track points +
inaccurate timing while driving besides something + GPS error.

What version of the product are you using (See "About" screen)?
0.4.1

Make/model of your device, and Android version?
HTC Hero (Scandinavian), original firmware, Android 1.5

Please provide any additional information below.

While using osmtracker, I noticed that my track shapes correspond with that
other people with other hardware record. But waypoints are in the wrong
places sometimes by hundred meters (while driving @90+ km/h and making
voice records what I see around). Therefore I made an experiment.

I have attached file with unaltered track. It is from the street with lots
of level crossings. Each of them goes perpendicular to the street (no Z
shaped at all). I pressed crossing button when my car was over each of
crossings (I missed one). And therefore expected to find all the crossing
well aligned. As you can see, they are shifted up to about 50m from each
other. And this shift I can not explain with GPS errors, or early/late
press of the button.

The only explanation what comes to mind is it takes several seconds for
data from GPS sensor to reach osmtracker. Osmtracker records waypoint at
the last reported position. Which can be way behind the real track. Would
it help to ask GPS sensor for the position NOW when waypoint button is
pressed I have no idea. Would it help to record point less often, I have no
idea too.

Original issue reported on code.google.com by a.kaspa...@gmail.com on 2 May 2010 at 12:34

Attachments:

GoogleCodeExporter commented 9 years ago
OMSTracker does indeed record waypoint for the last position it has already 
tracked,
and doesn't ask the GPS for the current position. Theoretically requesting the
position when marking a waypoint shouldn't help because the last one that we 
have is
the most recent one and there is no "new" position available, or it would have
already been recorded... However theory and practice are often different 
especially
when it involves hardware devices like GPS ! I should probably give a try at 
this
suggestion.

Original comment by nguillau...@gmail.com on 3 May 2010 at 4:21

GoogleCodeExporter commented 9 years ago
Just an idea:
Some gps logging tools for android give the possibility to use "satellite time" 
for logging the data. I suppose Location.getTime() should give this "satellite 
time" but I haven't tried if this is a timestamp extracted from the gps-signals 
or the system-time when the location was recorded on the device.

If the latter is right it should be possible to record the time when the 
waypoint was "created" in the ui and then wait for the location-notification 
with the closest timestamp.

Original comment by janrose....@googlemail.com on 19 Jan 2011 at 3:59

GoogleCodeExporter commented 9 years ago
Hi,

in v0.4.3 the way voice recordings are handled has changed. It should be a bit 
better now (for voice recordings).

The other issue mentioned is difficult to resolve.
First of all: android gives us a location update every 1 second. So while 
driving with 90+ km/h we'll get a location update every 25+ meters. (if the gps 
accuracy is at +/- 0 meters, on my phone i usually have an accuracy from 3-9m)
The best case is that you press the waypoint button just after a new location 
is received. A waypoint will then just be e.g. 0-5meters away from the real 
position.
The worst case is that you press the button just before a new location is 
received. The waypoint will then be 25 meters away from it's real position.

One can try to reduce this if we check gps time of the current location and the 
next location and check the time difference to find the "nearest" location.

Location.getTime() returns the timestamp of the "gps time" which can differ in 
some seconds/minutes compared to the android time (so we need to check the 
difference).
It could be possible to save the difference between gps time and android time 
and compare the timestamps to a waypoint timestamp when getting a new location.

Another possibility is to record the heading and speed of the previous location 
(if available) and calculate the new position... but i'm not sure how this 
could be done and how good this will work...

I'll think about a way that could be used to get some more accuracy to the 
waypoints...

If there are any other ideas please let me know.

best regards
Matthias

Original comment by matthias...@gmail.com on 21 Jan 2011 at 12:10

GoogleCodeExporter commented 9 years ago
Another idea is to remember the time at which the button was pressed, then look 
at the times of the previous and next GPS locations an then find the correct 
location by interpolating the GPS locations in a straight line. This means that 
an additional position is recorded for the button press, an no heading or speed 
is needed.

The difference between GPS and android time must be considered, of course.

Original comment by arronaxarronax on 8 Jan 2015 at 12:51