The vehicle has been parked since Friday and it has driven nine kilometres
In short
GPS drift makes a parked vehicle show movement because distance sums the gap between consecutive fixes, and that sum can only grow. Forty fixes an hour with 8 metres of wander invents roughly 320 metres an hour — about 19 kilometres over a long weekend. Filtering on speed does not stop it: a receiver that knows it is stationary reports zero while its position wanders.
Key takeaways
- Distance sums absolute gaps, so position noise never cancels — it accumulates in one direction only.
- Speed filtering alone fails: a stationary receiver reports 0 km/h while the position it reports keeps moving.
- The working stack is accuracy gate, then vehicle state, then a displacement anchor. Each alone leaks.
- Every filter costs real movement. An anchor set at 50 metres quietly discards the first 50 metres of each trip.
- The one-weekend test settles it: sum consecutive fixes for a parked vehicle and compare against the odometer delta.
The mileage is real arithmetic on unreal movement. A receiver that is standing still does not compute the same position twice; each fix lands a few metres from the last, and in a yard hemmed in by steel-clad units or under a canopy it lands much further out, because the receiver is solving with reflected signal. If your distance figure is the sum of the gaps between consecutive fixes, every one of those metres is added and none is ever taken back. Over a weekend that is kilometres, and the vehicle never left the bay.
The reason speed filtering does not rescue you is that the two fields disagree. A receiver estimates speed from the Doppler shift on the carrier, not from the change in reported position, and when it is stationary that estimate is honestly zero. So the feed says 0 km/h while the latitude and longitude keep changing, and a pipeline that gates trips on speed but sums distance on position happily accrues kilometres inside a state it has labelled 'stopped'.
One vehicle, one weekend, two numbers
- Choose a vehicle that demonstrably did not move — a unit off the road for repair, or anything parked from Friday evening to Monday morning with a keyholder who will confirm it.
- Export every raw position report across that window with its accuracy field, its speed field and both timestamps. Do not use a rendered trail; it has already been thinned.
- Sum the great-circle distance between each consecutive pair. That number is what an unfiltered pipeline would have billed.
- Compare it against the device odometer delta over the same window, if the unit reports one. Where it does not, the honest comparator is zero.
- Repeat for a vehicle parked in the open and one parked among containers or under cover. The difference between the two is your multipath exposure, and it is usually a factor of several.
Run this before anyone argues about vendors. A pipeline that invents 9 kilometres over a weekend on one vehicle is inventing a proportional amount on every vehicle, all the time, and the error is invisible on a moving truck because it hides inside a number that was going to be large anyway.
Position error is symmetric and distance is not. Every metre of noise in a sum of gaps pushes the total up, so the mileage a fleet reports is biased high by construction, never low.
Where the stationary noise comes from, ranked
| Source | How to confirm it | What it does to the number |
|---|---|---|
| No accuracy threshold on accepted fixes | Histogram the accuracy field over the parked window; look for a long tail | Occasional fixes hundreds of metres out add step changes, not drift |
| Multipath in a yard or covered bay | Compare the same vehicle parked outside against parked under cover | Persistent wander of tens of metres between consecutive fixes |
| Speed 0 while position moves | Filter the window to speed = 0 and sum the distance anyway | Distance accrues inside a state the system calls stopped |
| Distance summed over raw consecutive fixes | Re-run the same window with a 50-metre displacement gate and compare totals | Inflation grows with reporting rate — faster pings, more phantom distance |
| Unit still reporting after ignition off | Check whether fixes continue at a lower cadence overnight, and on what power | Extends the exposure window from working hours to the whole weekend |
The fourth row is the one people find counter-intuitive: raising the ping rate makes phantom mileage worse, not better. Twice the fixes means twice the noise terms in the sum. That is one reason a fixed global reporting interval is the wrong instrument, and why cadence is better modelled as a function of what the vehicle is doing — the argument in ping cadence set by what the vehicle is doing.
The filter stack, in order, and what each stage costs
Order matters, because each stage assumes the one before it has run. Applying them in a different sequence produces a system that is only partly protected, and partly protected here means the leak stays open on exactly the vehicles that park badly.
| Stage | Rule | What it costs in real movement |
|---|---|---|
| 1. Accuracy gate | Discard any fix whose reported accuracy is worse than a stated limit, before it touches anything | Vehicles in covered parking may produce no usable fixes at all, so they must render as unknown rather than as parked |
| 2. Vehicle state gate | No distance accrues while the state is off, based on ignition rather than inferred from motion | A tow, a ferry crossing or a car-transporter leg is genuine movement and will be dropped |
| 3. Displacement anchor | Hold an anchor while stopped; release only when a fix is more than about 50 metres away and 2 later fixes agree | The first 50 metres of every departure is lost — small per trip, visible across thousands of trips |
| 4. Speed confirmation | Open a trip only after consecutive fixes report meaningful speed, not one | Shunting, yard moves and creeping in a queue may never open a trip |
| 5. Path-level distance | Compute over the accepted, smoothed path rather than raw pairs; use a road-matched distance where money depends on it | The number stops matching the naive sum, so the change has to be announced before invoices move |
Stage 2 depends on how the ignition signal was actually wired, which varies by install far more than by product. A movement-inferred substitute for real ignition sense will report the vehicle as running whenever the accelerometer twitches, and that is precisely the condition you are trying to filter — the failure modes are laid out in what an ignition event actually proves. Stage 5 is where raw distance and road distance part company for good; the mechanics of that conversion, and which of the two belongs on an invoice, are covered in map matching, turning pings into roads.
Numbers that have already been published
Fixing the filter changes history, and someone downstream has been using the old figures. Mileage-based maintenance schedules will suddenly show services as further away; driver mileage claims will drop; any distance quoted to a customer or a subcontractor will move. Recompute the affected history in one pass rather than letting old and new coexist, version the calculation, and publish the filter parameters alongside any distance figure so two systems can be compared at all. The same discipline applies wherever a computed number leaves your boundary and lands in someone else's report, which is the failure pattern in the carrier says it sent the status and nothing moved.
Be careful with anything automated on top of the number. Rules that raise a maintenance job, close a timesheet or approve a mileage claim without a human in the path will act on the inflated figure silently and repeatedly — the reason we scope this kind of agent and automation work with the data-quality gate first and the automation second. Position history is also personal data about named drivers, which is why fleets that care about where it is processed reach the same conclusion as teams weighing running language models on their own infrastructure.
Making it an install test, not an incident
- Add an overnight drift test to install acceptance. A newly fitted unit that accrues distance while the vehicle is locked up has failed, whatever the wiring diagram says.
- Test the awkward parking, not the depot. The unit that behaves in an open yard is not evidence about the one in an underground bay.
- Alert on the pattern, not the incident. Any vehicle accruing distance with ignition off for more than a few minutes should raise a data-quality flag, because that condition is never legitimate outside a tow.
- Recheck after firmware changes. Reporting behaviour while parked is exactly the thing a vendor tunes without telling anybody.
Two failure modes look like this one and are not. If a vehicle accrues no distance because it has stopped reporting entirely, you have a stale-device problem instead, handled in the eleven vehicles that have not moved since morning. And if drift is concentrated on one device model or one install batch, treat it as a rollout defect rather than a physics problem — the staged approach with data-quality exit criteria in fitting trackers across a mixed-age fleet exists to catch exactly that. Both sit alongside this page in telematics and the live vehicle data plane, part of our logistics and mobility work.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
Why does a parked vehicle show movement on the tracking map?
Because a stationary receiver reports a slightly different position each time it computes one, and the map draws every reported position. Scatter of a few metres is normal in open sky and much larger where signals bounce off buildings, containers or a roof. The marker moving does not mean the vehicle did; it means the estimate moved.
Will filtering out fixes with zero speed remove phantom mileage?
No, and this is the trap. Speed is estimated from Doppler shift rather than from change in position, so a stationary unit reports zero speed while its coordinates continue to wander. A pipeline that gates on speed but measures distance from position will keep accruing kilometres in a state it has already labelled stopped. You need an accuracy gate and a displacement anchor as well.
How much distance can GPS noise invent overnight?
Multiply the number of fixes by the typical wander between them. At a 90-second cadence — 40 fixes an hour — with 8 metres of scatter, that is around 320 metres an hour, so roughly 8 kilometres over a 24-hour weekend day and more in a bad parking spot. The figure scales with reporting rate, so faster pings make it worse.
Does a displacement filter lose real short trips?
Yes, and that cost has to be accepted deliberately. An anchor released at 50 metres discards the first 50 metres of every genuine departure and can miss a yard shunt entirely. For most fleets that trade is worth it, but if short moves are the business — yard tractors, forklifts, last-metre operations — set the threshold from a measurement of your own parked scatter rather than copying a default.
- telematics
- data quality
- mileage
- fleet operations
The work behind this page
Builds from our portfolio that this page draws on.
Axlebound
Real-time fleet tracking and dispatching platform with full visibility over every vehicle, driver, and route.
LogisticsHaulBoard
An AI freight load board that matches every open load to the best-fit carrier, prices each lane on live spot-rate data, and tracks broker margin on every move.
LogisticsRead next
- The 8 fields in a position report, and the 2 that make it trustworthyA coordinate pair on its own proves almost nothing. The 8 fields around it decide whether a position is evidence, and 2 of them decide whether the other 6 can be believed.definition
- Ignition on and off: 1 true signal and its 4 false versionsEvery telematics feed carries an ignition flag. Whether it means the engine is running depends on how it was obtained, and the field itself almost never says.definition
- Map matching: snapping a scatter of fixes onto the right roadMap matching converts a scatter of position fixes into a path along real road segments. The distance that comes out is not the distance you get by joining the fixes.definition
- Arrival fired twice at the gate, and forty minutes late at the next stopDuplicate arrivals and late arrivals look like one flaky feature and are 3 unrelated faults. Replaying the raw pings for one bad arrival against the polygon tells you which one you have in about ten minutes.diagnostic
- Eleven vehicles have not moved since morning, and the fleet is fineA subset of stale vehicles is almost never a platform outage. Bucketing every vehicle by the age of its newest position, then looking for what the stale set has in common, names the fault in about ten minutes.diagnostic
- Breadcrumb trail: the line driven, not the line plannedThe trail is what the vehicle reported. The route line is what someone intended. Quoting one when you mean the other is how a mileage or detention dispute gets lost.definition
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation