Previous posts discussed how a phone’s location mechanism is capably accurate, but for PGO’s purposes, the sampling rate is much lower to manage server load. The last crucial segment to understanding PGO’s distance tracking algorithm is the speed limit, except that it is not really a speed limit although it is easier to think in those terms. Drivers are familiar with hard speed limits. By law, you may not drive faster than the posted limit; in practice, police tend to observe if a driver’s average speed over a time period is past the limit. With PGO’s sampling rate, a trainer’s location is observed once every 30 seconds, meaning that average speed could vary widely and be unreliable. The sampling rate was the $64k question, but the speed limit is the $1m question.
I have read two prominent possibilities of how PGO calculates distance. One idea predicts your estimated position based on speed and direction (interesting idea to reduce GPS noise), but requires more reliable speed estimates. The other, more likely, idea is simply calculating the straight line distance between two locations; if it is less than the allowed distance, count it; otherwise, trainer may be in a vehicle, ignore it!
PGO is coy about its fitness as a fitness app, but PGO apparently expects trainers to use human powered transport. How could PGO detect a trainer is riding in a vehicle (car, bus, train) rather than running fast? The internet’s guesses on the speed limit have varied wildly from 5-25 mph. To be clear, the discussion here is for incubating eggs; PokeStops are not subject to a speed limit; catching Pokemon may be subject to separate speed limits but is not the concern here.
Although a speed limit means an upper bound, there is almost certainly a lower bound value. PGO’s game parameters show that Incense lasts for 30 minutes; at a minimum, pokemon will appear after five minutes; pokemon may appear after one minute if the trainer moves at least 200 meters (whichever takes longer). Hence, the incubating egg speed limit should be at least 200 meters per minute so as to avoid penalizing trainers who are also maximizing Incense. On 30 second intervals, a convenient distance limit value is 150 meters, which fits my experimental data. Thinking in terms of a speed limit and calculating with significant digits, the posted limit is 10 mph.
So how could a trainer use this knowledge for maximum benefit? To be continued…
The previous post discussed the theoretical limits for PGO’s distance tracking, which is a function of at least a phone’s location precision and sampling rate. In short, the phone has sufficient accuracy, but locations must be submitted to PGO servers for verification. I speculate that the sampling rate was too high when PGO was first released, contributing to server overload in the first week.
So what is the sampling rate? That is the $64k question. The best guest I found online was once every 1-5 minutes — that seems awfully low and imprecise. I decided to time my walk to my usual jogging path. I started timing after noting when the egg’s distance had just updated. Then I repeatedly checked the distance for update and exited to the map view. My checking interval was about ten seconds. My walk lasted seven minutes, I counted one update, which occurred around the four minute mark. I waited another minute, and sure enough, another update at the eight minute mark. So your distances are updated every four minutes (of iOS time, which is guaranteed to be not sooner). BOOM, two months of internet guessing solved in under ten minutes. Note that my calculations were using PGO v1.3 and v1.5, and later PGO versions will likely improve the algorithm and tweak the numbers.
Hm, once every four minutes is a fairly low sampling rate and seems tedious to test. That means if I moved around and then returned to my starting point before four minutes, PGO would register no movement. But I have done that at PokeStops and gained distance. I should verify the four minutes, so I moved about 30 meters away, waited four minutes, and observed my distance update with 30 meters, great! Then serendipity spawned. I moved back towards my starting point plus another 20 meters, under a tree’s shade. After another four minutes, I was expecting to gain 50 meters, but I actually gained 100.
Immediately, I knew that the sampling rate must be higher, and that four minutes is simply when updates are pushed to your phone. Well, standing under the tree’s shade, my only PGO movement was due to GPS noise. I did notice slight movements on my map view, perhaps enough to straddle a GPS location border and register 10 meters each time? Hm, that would mean five more samples within about three minutes, perhaps once every 30 seconds? I moved to a quiet zone (lacking PGO elements) with stable GPS signal, timed the appearances of the white, spinning pokeball in the upper left, and sure enough, it appears every 30 seconds. BOOM, two answers to two months of internet guessing solved in under ten minutes each. But how does this help with understanding the distance tracking algorithm?
To be continued…
Pokelog gains a few simple statistics in a separate window. As I continue using it, I find areas to streamline and add new features, such as the statistics.
As I anticipate the buddy system, I am still gathering data on the distance tracker in Pokemon GO (PGO). PGO has been in the wild for two months now, and after reading plenty of anecdotes, I have yet to find a definitive explanation to how it works. The latest guesses have stabilized to a speed limit around 10 mph and moving in a straight line. That sounds fantastic if I am on a luxury cruise ship, otherwise…
The first time I went jogging with PGO, I was shocked to find that it counted less than half of my actual distance. As a programmer, I first thought about how to logically work out the distance tracking algorithm. The upper limit on precision is the hardware. Hardware data indicates that Android and iPhone have precision to within 0.01 km, which sounds reasonable considering that PGO tracks to within 0.01 km. Tracking distance then could be as simple as the difference between two points, where the upper limit on accuracy is the location sampling rate. Cursory searching indicates that Android and iPhone have rates at least 1 Hz. So if your phone was plugged in to a power outlet with a very long extension cord, your phone could track your distance very well.
Well, long extension cords are impractical but extra battery packs are wonderful companions for many PGO trainers I have seen. Now with buddy pokemon, I wonder if someone makes a battery pack styled to resemble Voltorb or Electrode. Even ignoring energy issues for the moment, location samples are sent to PGO servers, and this may be the biggest issue. How many millions of trainers are active at any given time? So PGO’s location sampling rate is probably less than 1 Hz. What is the impact? Suppose the sampling rate is once every ten seconds. If you walked in a straight line for five seconds, then walked back to your starting point, PGO would believe you never moved. Now we get into the tradeoffs for distance tracking accuracy and server load.
To be continued…
As I use Pokelog for my own collection, I get to find and fix bugs as I encounter them. Fixed a few bugs related to evolving as well as a few interface enhancements.
Pokelog’s sorting options are consolidated to a pop up menu with a passing resemblance to the same in Pokemon Go. I figured out that HP sorting is actually based on HP% (I could have searched a little more on the internet instead of forcing a few pokemon to sustain injuries, but I just have so many potions). As a dynamic statistic, it is useful mostly in game for gym battlers, so Pokelog does not have HP sorting.
On a related note, Pokelog does not have Favorite sorting. One obvious reason is because Pokelog does not have a Favorites feature. The feature seems to be another dynamic option, useful mostly in game, so I am unconvinced how useful it would be in Pokelog. I am open to persuasive arguments.