The way that completed Explorer tiles are calculated has remained pretty static since its inception in March 2015 which included some, less than precise code to try to get around some of its known limitations (detailed below). I’ve now refined that code to improve the accuracy and also speed up the processing quite considerably and also introduced a method to get a definitive list of tiles for an Activity. This improved accuracy will of course result in a number of tiles that were previously marked as ticked now showing up as unticked (and potentially affecting your max square size) but only tiles that you never actually visited in the first place 🙂
Important things to understand
- By default, the Explorer tiles are calculated using the summary map line for each activity which is the line you see in the map on your Activities List page. This is a simplified version of the route taken and can miss out some of the detail of your activity and occasionally fail to cross a tile boundary which you actually did cross, equally it can cross one that you didn’t!
- An Activity’s summary map can contain a portion that you didn’t actually travel which should not be included in tile ticking. This usually happens for one of two reasons:
- The user pauses their GPS device for a cafe stop and forgets to restart it. Half an hour later they notice their mistake and restart it and a line straight between those two points is created mid-activity.
- A user starts recording their GPS device before a signal has been fully established from the satellites. This can result in a line coming from the last location the GPS was used to the current location once the GPS works out where it is.
- Some summary map portions can be very long (especially for people riding on very long, straight roads) and from a data perspective can’t be differentiated from one of these GPS error lines so a max distance of line to consider for ticking tiles has to be implemented to try and limit the number of error lines being taken into consideration.
- If the definitive set of tiles has been created for the activity (see below) then this list is then used for this activity on the Summary and Activities List pages rather than creating the set of tiles from its summary line.
- Each portion of the summary map was populated with dummy data points every 100m and these, along with the end points, were used to create a list of completed tiles.
- For each of these data points, a 100m buffer was allowed to cater for the gaps between each point.
- There was no way to overwrite any incorrectly marked tiles (either false positive or false negative).
- The max line distance for any single portion of the summary map was set to 10km. Any portion shorter than this would used to tick off tiles (resulting in some false positives where people have forgotten to restart their GPS) but also some activities that take in a straight road for longer than 10km would not get all of their correct tiles ticked.
Definitive tiles for an activity
The tackling of that final point above has been the spark that has ignited these other updates. Now, when you open an Activity’s Details page (by clicking on its name in the list or on its line in the map on the Activities List), in the background it will work out and store a definitive list of the Explorer tiles completed for this activity using every single data point recorded. No need for the code to fill in gaps as the data should be recorded for every single second of the activity (people shouldn’t be using Smart recording these days!) so only those tiles actually visited will be ticked. i.e. no more false positives or false negatives for that Activity on the Summary and Activities List pages.
Note: you will need to head back to/refresh your Summary page in order to get any changes in your tiles included in the datafile for the Chrome Extension and also to update the leaderboards.
Removal of 100m buffer
Now that you can get that definitive list of tiles populated for a given Activity, that opened the door to remove the 100m buffer in the old calculation. I ran this idea past the community on Facebook and the “Ride Every Tile” Strava group and got 100% positive feedback to remove the buffer… so I did!
This will inevitably result in you loosing a few previously ticked tiles where you didn’t originally enter them fully, so time to plan some new outings.
Update to algorithm
I’ve also moved from the original method of adding additional points every 100m along each portion of a summary map to a purely algebraic approach which is far more accurate and also far faster to run. Remember, this will only be used for Activities that haven’t had their definitive set of tiles already calculated.
Max line length change
As I mentioned earlier, a hard coded 10km limit was applied to each portion of a summary map, if it was above this then the tiles covered along its length were ignored, if less then they were ticked off. There still needs to be some limit in place but seeing as the summary map lines get more simplified (i.e. longer lines) the longer the distance of the Activity, I’ve changed that 10km limit to now be the [Activity distance]/10. I’m sure this will still result in a few tiles being included when they shouldn’t and vice versa but in each of those cases just open the associated Activity Details page and the correct set of tiles will be set for that Activity from that point forwards.
Tiles calculated column/filter on Activities List
New column on the Activities List page called “Tiles calculated” that allows you to filter to show just those that have already had their definitive list of tiles calculated, or vice versa.
Some people will inevitably have tiles that they can’t physically get into because those areas are strictly off limits (e.g. Area 51). This is a bit of a pain for people wanting to continue to grow their Max Square but have a square they just can’t tick off. A debate is ongoing on how this sort of thing should be handled over on this thread on the “Ride Every Tile” Strava club – //www.strava.com/clubs/279168/posts/582450 (note: you might need to be a member of the club to see that discussion).
Whatever is agreed upon in there, I’m more than happy to implement 😀