This object is in archive! 

Don't record altitude of track if poor GPS vertical precision (VDOP)

Andrew Heard shared this question 6 years ago
Answered

In my experience the accuracy of GPS altitude often takes longer to stabilize than position. However with automatic Locus track recording, this often results in a few very inaccurate altitude values when the GPS is first turned on or enabled or Locus is first started. This in turn results in stupid values for the track gradient graph, for example:

ce19dad7e5d81df170b8501ce715dfc8

This has already been discussed in a few old topics, at least here and here. However it still occurs as this recent graph (above) shows. Maybe the fix never worked? Recall the improvement was that quote "recording service will now throw away first two points right after you enable GPS". In the attached sample (and not the best example I could find) the 1st track point is 406m and the next point 7 minutes later when I actually start moving is 386m. I believe the 1st point is wrong by 20m (+/- accuracy). This resulted in a bogus 30% gradient, which with auto scaling to 100% reduced the resolution of further points on the chart. I note the Position dilution of precision (PDOP) is recorded as 10m; it would be interesting to know what the Vertical Dilution Of Precision (VDOP) was.


At present track recording won't commence until PDOP is good, but at this time VDOP may still be poor. My question, and maybe a suggestion, is to ask can a track point be recorded without an altitude value if the GPS Vertical Dilution Of Precision is poor? And consequently for any null altitude, the gradient would be ignored, and a gap displayed on the chart.

Replies (1)

photo
1

Good day Andrew,

both topics you mention are based on problem with chart gradient in case of any breaks in tracks, so not directly this.

Anyway it is correct, and I hope it still works, that first three received locations right after GPS is turned on are not recorded.

Unfortunately as a developer, I may get only HDOP value. VDOP was never available directly ( incorrect, it looks that since Android 8.0, it will be available as well : https://developer.android.com/reference/android/location/Location.html#hasVerticalAccuracy() ), so your suggestion is not possible here.


I may offer increasing of "ignore start X locations" value to 5. 5 seconds still sound like usable value as exchange for "less mess at start of recording" ... as a most easy quick help.


Generally probably best solution here should be to modify first few recorded points based on later data. So simply, if next points will be on same location, but with different elevation, something is probably wrong with first ... anyway this will need to change how storing of points during recording happen ...


So 5 seconds? :)

photo
1

Hi Menion

> so not directly this

not directly, but I thought they were useful references/ background info

I just did a simple test, turn on Locus from "cold start" with auto track recording. Initial GPX altitude was 249m but it took a few minutes before it settled around 238m. That was with HDOP of 10m. Not very good? It would have resulted in a gradient spike, and even ignoring first 5 seconds wouldn't have helped. I extracted the timetamp & elevation into an Excel graph. Yes I sometimes do delete the first points manually on a track recording to fix the chart myself but this is of course tedious.

Does this happen on your and other peoples phones? Easy to test.

I like your idea of overwriting points at same location, however what is same location? From my attached track you can see that lat/lon was not exact same position even though I stood still, so this idea may cause other problems. In general case where same position for hours, then rewriting points once the position moves will need to rewrite too many points, and maybe for rockclimbers/ hang gliders/ 3D mapping this is unacceptable anyway ;-(


I am guessing that if phone is in area of poor GPS reception eg. "concrete canyon" when track recording is commenced then VDOP will be far worse?

photo
1

This is a minor detail, but to be consistent with the other fields, before the GPS position is known or disabled, the altitude should be displayed as dash "-" rather than 0m.59531779905d6af7d038ab86defb3f36

photo
1

Hello Andrew,

I'm sorry, but I really do not know how may I help here.

Your complain on vertical accuracy of GPS is little funny. Change 11m in altitude after few minutes is equal zero change. Elevation generally has around twice worst precision then horizontal coordinates. Accuracy 10 metres visible in UI does not say that your location is within 10 metres circle. It more precise say that there is around 60% probability that your current location is in 10 metres circle. It may be anyway a lot lot worst. And if you consider that vertical accuracy is worst then horizontal, then 10m change is really really good!


I'm also unable to simulate small issue with "0 m" value in GPS screen. By default, there is really "-" value, at least on my device. It should be probably some side effect of some turn on/off/on/off work with Locus?


So generally problem here is more in method of compute and filtering of slope values, then in incorrect elevation values. And because slope is not the only unit that needs improved filter, I do not have quick simple solution on this for now. Sorry and thanks for understanding.

photo
1

No problems. Thanks for looking into it. My example 2 days ago was with clear sky & good satellite coverage, so I am not surprised the VDOP is good. I suspect the gradient spikes occur when firing up the phone in the morning in locations where satellite coverage is poor.

photo
1

Yes it is possible. Slope is not the only problem that Locus has with work with received data. Will have to focus on it more carefully and prepare it over winter ...

photo
1

@menion - Locus does have access to VDOP, at least on my phone - I just enabled NMEA log file recording. And I can see periodic $GPGSA sentences, which contain VDOP. For example I decoded the following:

1c9dfe742bdc420b32439fb9025fa361

In this example VDOP=0.8. From this table values <= 5 are ideal..good. And values > 10 should be discarded.

I then moved phone/GPS to position with poor signal. Horizontal accuracy was displayed by Locus as 30m and the $GPGSA sentence contained mostly NULL fields:

$GPGSA,A,1,,,,,,,,,,,,,,,*1E

Of any use?

Replies have been locked on this page!