Offline kaarten zijn niet optioneel in tactische toepassingen. Operatoren in betwiste of afgelegen omgevingen kunnen niet vertrouwen op tegelservers. Het kaartpakket moet op het apparaat staan, bevraaagbaar zijn zonder internettoegang en klein genoeg om op de beschikbare opslag te passen. Twee tegelformaten domineren tactisch gebruik: MBTiles, de gevestigde SQLite-gebaseerde standaard, en PMTiles, een nieuwer enkelvoudig-bestandsformaat ontworpen voor cloud-geoptimaliseerde willekeurige toegang dat ook goed werkt voor ingebedde implementatie.
Kiezen tussen beide — en begrijpen hoe offline kaartpakketten te genereren, te leveren en bij te werken — is een praktische engineeringsbeslissing met significante operationele gevolgen. Een operator die te weinig opslag heeft omdat het kaartpakket onnodig groot was, of die een bepaald gebied niet kan zien omdat de verpakte zoomniveaus verkeerd waren, is door de logistiek van offline kaartlevering in de steek gelaten.
MBTiles Formaat: SQLite Containerstructuur
MBTiles is een open specificatie onderhouden door Mapbox die kaarttegels — raster of vector — verpakt in een SQLite-database. Het databaseschema is minimaal: twee vereiste tabellen en één optionele.
De tiles-tabel slaat de werkelijke tegeldata op: zoom_level INTEGER, tile_column INTEGER, tile_row INTEGER en tile_data BLOB. Het tegelcoördinatensysteem gebruikt de TMS-conventie (Tile Map Service), waarbij de Y-as is omgekeerd ten opzichte van de meer gebruikelijke XYZ-conventie van webkaartservices — tile_row = (2^zoom - 1) - y. Deze inversie is een veelvoorkomende bron van bugs bij het integreren van MBTiles met kaartbibliotheken die XYZ-coördinaten gebruiken.
De metadata-tabel slaat sleutel-waardeparen op die de tilesets beschrijven. Voor vector tile MBTiles zijn twee aanvullende metadata-sleutels vereist: json (het TileJSON-stijl laagschema) en vector_layers (de per-laag attribuutdefinities).
Prestatiekenmerken van MBTiles hangen sterk af van het toegangspatroon. De samengestelde index op (zoom_level, tile_column, tile_row) is de kritieke prestatie-index — zonder deze verslechtert afzonderlijke tegelzoekopdrachten tot volledige tabelscans naarmate de database groeit.
PMTiles: Enkelvoudig-Bestandsformaat voor Willekeurige Toegang
PMTiles is ontwikkeld door Protomaps als een cloud-geoptimaliseerd alternatief voor MBTiles, ontworpen om tegels direct te bedienen vanuit objectopslag (S3, GCS, Azure Blob) via HTTP-bereiksverzoeken — zonder tegelserver. Een enkel PMTiles-bestand bevat alle tegels plus een interne index die elke tegel kan lokaliseren met maximaal twee HTTP-bereiksverzoeken ongeacht de totale bestandsomvang.
Voor tactische ingebedde implementatie vertalen de cloud-optimalisatieeigenschappen van PMTiles naar andere voordelen: geen SQLite-overhead, geen SQLite-blokconflicten wanneer meerdere processen tegelijkertijd toegang hebben tot het bestand, en een eenvoudigere leesimplementatie. De PMTiles-specificatie is volledig open en implementaties bestaan voor Android, iOS en JavaScript.
De afweging: PMTiles is door ontwerp onveranderlijk. Afzonderlijke tegels toevoegen of vervangen vereist het herschrijven van het bestand. Voor tactische toepassingen waarbij het kaartpakket als geheel eenheid wordt vervangen, is dit geen probleem. Voor toepassingen die afzonderlijke tegels moeten patchen, is MBTiles geschikter.
Tegelgeneratie: tippecanoe, MapTiler, GDAL
tippecanoe is het standaardgereedschap voor het genereren van vectortegels uit GeoJSON, FlatGeobuf of GeoPackage-brondata. Zijn vereenvoudigingsalgoritme is specifiek ontworpen om bruikbare tegels op elk zoomniveau te produceren. Voor tactische toepassingen zijn de sleutelparameters --maximum-zoom (doorgaans 16 voor infanteriegebruik, 12–14 voor voertuigoperaties), --minimum-zoom en --coalesce-fraction-as-needed.
MapTiler Engine (vroeger GDAL2Tiles) verwerkt rastertegel generatie: orthobeeldmateriaal, satellietraster, DTED terrein. GDAL's gdal2tiles.py script biedt vergelijkbare rastertegel generatiecapaciteiten zonder kosten. Voor grote bronrasters is de generatietijd significant — 8–16 uur voor een volledig landstileset op één werkstation. Parallelliseren over meerdere kernen met de --processes N vlag vermindert dit proportioneel.
Gedeeltelijke Updatestrategieën
Volledige kaartpakketvervanging is operationeel duur. Een 15GB landsschaal MBTiles-bestand kan niet opnieuw worden gedownload elke keer dat een klein gebied wordt bijgewerkt. Gedeeltelijke updatestrategieën lossen dit op met deltapakketten — MBTiles-bestanden die alleen de gewijzigde tegels bevatten.
Het genereren van een deltapakket vereist het vergelijken van de huidige versie van elke tegel (geïdentificeerd door een hash van zijn tile_data) met de vorige versie. De samenvoegoperatie op het apparaat gebruikt SQLite's INSERT OR REPLACE INTO tiles-syntaxis.
Versiebeheer vereist een versieschema in de MBTiles-metadata. De standaardbenadering is een version-veld in de metadata-tabel, verhoogd bij elke volledige release, en een last_updated-tijdstempel.
Integratie in Android en iOS
Op Android is MapLibre GL Native de standaard open-source kaartrenderer voor toepassingen die offline vectortegelondersteuning vereisen. Het accepteert MBTiles-bronnen via een aangepaste LocalTilesSource-implementatie die de toepassing registreert bij de kaaststijl. Tegels bevragen uit de SQLite-database vindt plaats op een achtergrondthread via een threadpool.
Multi-bron tegelsamenvoeging — overlay-tegels weergeven van een afzonderlijke bron bovenop een basiskaart van een andere — wordt in MapLibre ondersteund door meerdere bronnen in de kaaststijl te stapelen.
Kernbevinding: De meest operationeel significante verpakkingsbeslissing is de keuze van zoomniveau. Zoomniveaus 0–18 verpakken voor een landsscha al-implementatie produceert bestanden 10–50x groter dan zoomniveaus 6–16. Voor grondinfanteriegebruik zijn zoomniveaus 8–17 het operationele bereik. Voor voertuigoperaties 6–15. Pak nooit meer zoomniveaus in dan de operationele vereiste vraagt — opslag is een eindige resource op tactische apparaten.