Wat er is, en wat er mist
Aankomstdetectie werkt alleen zo goed als de coördinaten eronder. Hier staan de gemeten cijfers, inclusief de ketens waar Stapel het slechtst op scoort.
- Versie
stores.nl.v1.json, gebouwd op- Omvang
- 24.699 winkels, 175 ketens. 1.632 kB onbewerkt, 561 kB ingepakt. Dit is het bestand dat meegeleverd wordt; de negenentwintig andere landen staan hieronder
- Bron
- OpenStreetMap, uit een Geofabrik-landuittreksel, per keten op
brand:wikidata - Licentie
- ODbL, dezelfde als de bron
- SHA-256
24c32922c096078dfd3522384460a8bcdf201ecc9cf12f605a84e5120b4cfbbf
Dekking per keten
“Gevonden” is wat de pijplijn overhield na opschonen. “Gepubliceerd” is wat de keten of Locatus zelf zegt te hebben. “Dekking” is het eerste gedeeld door het tweede, dus boven de 100% vond de pijplijn meer dan de keten zelf opgeeft.
| Keten | Gevonden | Gepubliceerd | Dekking |
|---|---|---|---|
| DA | 212 | 300 | 71% |
| Pets Place | 128 | 170 | 75% |
| Decathlon | 22 | 24 | 92% |
| C&A | 96 | 103 | 93% |
| Blokker | 57 | 61 | 93% |
| Etos | 493 | 522 | 94% |
| Xenos | 157 | 165 | 95% |
| Kruidvat | 987 | 1.013 | 97% |
| GAMMA | 162 | 166 | 98% |
| Karwei | 128 | 131 | 98% |
| Praxis | 180 | 184 | 98% |
| La Place | 46 | 47 | 98% |
| Primera | 546 | 550 | 99% |
| PLUS | 437 | 440 | 99% |
| Lidl | 437 | 438 | 100% |
| de Bijenkorf | 7 | 7 | 100% |
| MediaMarkt | 54 | 54 | 100% |
| Trekpleister | 186 | 185 | 101% |
| Jumbo | 695 | 685 | 101% |
| HEMA | 560 | 544 | 103% |
| Ekoplaza | 88 | 85 | 104% |
| Welkoop | 167 | 160 | 104% |
| Intersport | 37 | 35 | 106% |
| IKEA | 15 | 14 | 107% |
| Intratuin | 57 | 53 | 108% |
| Albert Heijn | 1.199 | 1.017 | 118% |
| Holland & Barrett | 194 | — | — |
| H&M | 85 | — | — |
| vanHaren | 135 | — | — |
| Douglas | 94 | — | — |
| ICI PARIS XL | 141 | — | — |
| Rituals | 96 | — | — |
| Shell | 500 | — | — |
| BP | 187 | — | — |
| Esso | 468 | — | — |
| Starbucks | 99 | — | — |
Waarom DA en Pets Place onderaan staan
DA op 71% en Pets Place op 75% zijn de twee slechtste, en het ligt niet aan het filter: de winkels staan simpelweg niet in OpenStreetMap. Allebei ketens van kleine winkels in winkelstraten, en dat is precies waar de dekking van OSM dun wordt. Een ontbrekende winkel betekent geen melding bij aankomst; de kaart zelf werkt gewoon.
Waarom Albert Heijn op 118% staat
978 Albert Heijn plus 38 AH XL is 1.016 supermarkten, binnen één winkel van het Locatus-cijfer. Het verschil zit volledig in AH to go: OpenStreetMap kent er 178, AH publiceert er 86. Van die 178 staan er 84 in een OK-tankstation en 47 op een NS-station, en 151 zijn in 2026 nog bewerkt, dus verouderd is het niet. AH lijkt gefranchisete pompshops niet mee te tellen.
Een pompshop is geen volledige supermarkt, maar een record kent alleen zijn keten, coördinaten en adres: het subformaat gaat verloren, en een AH to go is in de app niet van een gewone Albert Heijn te onderscheiden.
Wat er níét klopt
Vijf dingen die je zou moeten weten voordat je deze data vertrouwt. Allemaal gemeten, geen van alle vermoed.
1. Adressen ontbreken, en per keten verschillend
| Keten | Zonder adres | Van totaal | Aandeel |
|---|---|---|---|
| Starbucks | 23 | 99 | 23,2% |
| Xenos | 28 | 157 | 17,8% |
| La Place | 8 | 46 | 17,4% |
| Shell | 83 | 500 | 16,6% |
| Esso | 72 | 468 | 15,4% |
| DA | 29 | 212 | 13,7% |
| vanHaren | 14 | 135 | 10,4% |
| Ekoplaza | 8 | 88 | 9,1% |
| Douglas | 8 | 94 | 8,5% |
| Rituals | 8 | 96 | 8,3% |
| Intersport | 3 | 37 | 8,1% |
| Praxis | 14 | 180 | 7,8% |
Aankomstdetectie draait op coördinaten en heeft hier geen last van. Zoeken op postcode wel: dat vindt stilzwijgend niets voor bijna een kwart van de Starbucks-vestigingen.
2. Kruidvat is te perfect
987 van de 987 records hebben identieke tagsets, geen ontbrekend veld en
source=AS Watson BNL: een bedrijfsimport, geen vrijwilligerswerk.
Uitstekend zolang iemand hem ververst, en op slag verouderd op de dag dat dat stopt,
zonder zichtbare verandering. De andere ketens verslechteren geleidelijk; deze valt van een
klif.
3. Niets merkt op dat een winkel gesloten is
Een winkel die dicht gaat blijft in OpenStreetMap staan tot een vrijwilliger hem weghaalt, en dat duurt maanden. Etos heeft er al één die als leegstaand getagd is en de merknaam nog draagt. Hier is geen controle voor, in geen enkele richting, en het is van mijn kant niet op te lossen. Daarom kun je in de app zelf een winkel vastleggen.
4. De controle vangt verschuiving, geen onjuistheid
De bouwpijplijn stopt als een keten meer dan 20% beweegt ten opzichte van de vorige uitgave. Getest: hij faalt op een Lidl-daling van 27,2% en op een keten die verdwijnt, en laat 3,4% door. Maar hij kan een juist getal niet van een consequent verkeerd getal onderscheiden, en de tabel met verwachte aantallen is met de hand ingevoerd en veroudert.
5. Overpass is verlaten, de aanname eronder niet
Zes ketens ophalen via Overpass kostte 881 seconden: 123 tot 137 seconden per keten, vrijwel ongeacht de opbrengst, omdat het scannen van een heel land domineert. Die belasting hoort niet op een gratis vrijwilligersdienst, dus komen hele landen nu uit een Geofabrik-uittreksel dat ik zelf download en lokaal verwerk. Overpass is alleen nog de route om één keten bij te werken. Wat níét veranderde: alles hangt nog steeds aan wat vrijwilligers in OpenStreetMap zetten, en een uittreksel is daar een kopie van.
Hoe het bestand gemaakt wordt
Voor wie het bestand wil nabouwen
- Per keten een lijst Wikidata-identificatoren, niet één. Albert Heijn heeft er drie; met maar één verdwijnen 216 winkels stilzwijgend.
- Het Geofabrik-uittreksel van het land met
osmiumuitdunnen tot alles metshop,amenityofbrand, en in één doorloop tegen elke keten matchen. Eén keten bijwerken kan nog via Overpass; dat antwoord meldt een time-out met HTTP 200, dus dat veld wordt apart gecontroleerd. - Normaliseren, coördinaten afronden op vijf decimalen, en dubbelen binnen 25 meter samenvoegen.
- Filteren op een witte lijst van winkeltypes. Uitsluiten op naam levert alleen al bij AH 65 niet-winkels op, waaronder parkeerplaatsen en twee laadstations.
- Vergelijken met de vorige uitgave en de build stoppen bij grote verschuivingen.
- Versienummer, SHA-256 en ECDSA P-256-handtekening erop, en publiceren. Niet Ed25519: dat bereikt
java.securitypas op Android 13, en Stapel draait vanaf Android 8. - Hetzelfde bestand meeleveren in de app, zodat een verse installatie offline alles weet.
De bouw is reproduceerbaar tot op de byte vanaf de opgeslagen ruwe data.
Negenentwintig landen erbij
Dezelfde bestanden bestaan voor elk land in de tabel hieronder. Het aantal per land staat daarin, zoals gebouwd op de datum in het onderschrift, want dat is een getal dat bij elke herbouw verschuift. Elk land kwam in zijn eigen uitgave, en de releasenotities zeggen welke. Ze worden niet meegeleverd: alleen Nederland zit in de app, de rest download je per land, op wifi.
| Land | Winkels | Ketens | Ingepakt |
|---|---|---|---|
| Verenigde Staten | 485.840 | 1.640 | 9.727 kB |
| Japan | 112.725 | 197 | 1.062 kB |
| Groot-Brittannië | 73.075 | 190 | 1.455 kB |
| Canada | 70.125 | 1.118 | 1.168 kB |
| Duitsland | 59.647 | 73 | 1.207 kB |
| Polen | 56.102 | 200 | 814 kB |
| Italië | 45.297 | 175 | 686 kB |
| Frankrijk | 41.240 | 77 | 577 kB |
| Spanje | 34.345 | 183 | 498 kB |
| Mexico | 30.666 | 148 | 347 kB |
| Australië | 27.549 | 200 | 345 kB |
| Brazilië | 24.239 | 126 | 387 kB |
| Oostenrijk | 14.138 | 138 | 237 kB |
| België | 12.942 | 178 | 208 kB |
| Zwitserland | 12.174 | 134 | 188 kB |
| Portugal | 11.491 | 166 | 196 kB |
| Tsjechië | 11.480 | 161 | 144 kB |
| Zweden | 11.225 | 107 | 164 kB |
| Noorwegen | 10.517 | 76 | 91 kB |
| Griekenland | 10.056 | 98 | 140 kB |
| Zuid-Afrika | 9.801 | 46 | 146 kB |
| Argentinië | 8.597 | 61 | 132 kB |
| Slowakije | 7.503 | 125 | 86 kB |
| Denemarken | 6.944 | 60 | 58 kB |
| Finland | 6.755 | 59 | 119 kB |
| Ierland | 6.163 | 105 | 88 kB |
| Nieuw-Zeeland | 6.057 | 146 | 79 kB |
| IJsland | 293 | 10 | 6 kB |
| Luxemburg | 137 | 6 | 3 kB |
Voor die negenentwintig is er geen tabel met gepubliceerde aantallen om tegenaan te houden, dus de dekking per keten is daar niet gemeten. Dat is een gat, en het staat hier omdat het er is.
Landen die in stukken komen
Elk land komt in stukken binnen. Je toestel haalt de stukken op die bij je laatst bekende punt in de buurt liggen en niet meer, plus één basisstuk voor wie geen locatie deelt. Dat is het enige geval waarin een download iets zegt over waar je bent, en het staat volledig uitgeschreven op de privacypagina.
Ze komen inmiddels allemaal alleen als stukken binnen, zonder heel landsbestand ernaast. Omvang is niet wat dat bepaalt. IJsland past ruim in één bestand en komt er toch zo uit. Nederland is het enige land dat daarnaast kant-en-klaar in de app zelf meekomt, zodat een vers geïnstalleerde Stapel winkels kent voordat er iets gedownload is.
Het basisstuk is wat er voor mensen veranderde, niet alleen voor de bouwstraat. Daarvoor installeerde een toestel dat in Spanje, België, Portugal of Italië geen locatie kon delen helemaal niets: er was geen stuk te kiezen zonder punt om het tegen te kiezen. Nu krijgt het het basisstuk, met elke keten van dat land erin.
Bronvermelding en licentie
Winkellocaties zijn afgeleid van OpenStreetMap, © OpenStreetMap-bijdragers, beschikbaar onder de Open Database License (ODbL) 1.0.
De afgeleide database die Stapel meelevert en synchroniseert valt onder dezelfde licentie, wordt publiek gepubliceerd met de code die hem bouwt, en dezelfde vermelding staat in de app op het scherm “Over”.
Merknamen en logo’s van ketens zijn eigendom van die ketens. De app levert merklogo’s mee, van Wikimedia Commons en van de sites van de ketens zelf, met herkomst en licentie per logo in de app.
In de Play Store
Stapel staat in de Play Store. Gratis, zonder account, en je hoeft nergens voor op een lijst te staan.