Hărțile offline nu sunt opționale în aplicațiile tactice. Operatorii din medii contestate sau îndepărtate nu se pot baza pe serverele de plăci. Pachetul de hărți trebuie să fie pe dispozitiv, interogabil fără acces la internet și suficient de mic pentru a se potrivi pe stocarea disponibilă. Două formate de ambalare a plăcilor domină utilizarea tactică: MBTiles, standardul consacrat bazat pe SQLite, și PMTiles, un format mai nou cu un singur fișier proiectat pentru acces aleator optimizat pentru cloud care funcționează bine și pentru deploymentul integrat.

Alegerea între acestea — și înțelegerea modului de generare, livrare și actualizare a pachetelor de hărți offline — este o decizie de inginerie practică cu consecințe operaționale semnificative. Un operator care rămâne fără spațiu de stocare deoarece pachetul de hărți a fost inutil de mare, sau care nu poate vedea o anumită zonă deoarece nivelurile de zoom ambalate au fost greșite, a fost înșelat de logistica livrării hărților offline.

Formatul MBTiles: structura containerului SQLite

MBTiles este o specificație open menținută de Mapbox care ambalează plăci de hartă — raster sau vectoriale — într-o bază de date SQLite. Schema bazei de date este minimă: două tabele necesare și unul opțional.

Tabelul tiles stochează datele efective ale plăcilor: zoom_level INTEGER, tile_column INTEGER, tile_row INTEGER și tile_data BLOB. Sistemul de coordonate al plăcilor folosește convenția TMS (Tile Map Service), unde axa Y este inversată față de convenția XYZ mai comună utilizată de serviciile de hartă web — tile_row = (2^zoom - 1) - y. Această inversare este o sursă comună de erori la integrarea MBTiles cu bibliotecile de hărți care folosesc coordonate XYZ.

Tabelul metadata stochează perechi cheie-valoare care descriu setul de plăci: name (numele afișat), type (overlay sau baselayer), version, description, format (png, jpg sau pbf pentru plăci vectoriale), bounds (caseta delimitatoare în WGS84), center (vizualizarea implicită) și minzoom/maxzoom. Pentru MBTiles cu plăci vectoriale, sunt necesare două chei de metadate suplimentare: json (schema stratului în stil TileJSON) și vector_layers (definițiile atributelor per strat).

Caracteristicile de performanță ale MBTiles depind în mare măsură de modelul de acces. Citirile secvențiale ale plăcilor (încărcarea raster la pan/zoom) sunt rapide deoarece indexurile B-tree ale SQLite sunt eficiente pentru interogările de interval. Indexul compus pe (zoom_level, tile_column, tile_row) este indexul critic de performanță — fără el, căutările individuale ale plăcilor degradează la scanări complete ale tabelului pe măsură ce baza de date crește. Un fișier MBTiles de 10 GB care acoperă o țară la nivelurile de zoom 0–16 cu acest index are performanță adecvată pe dispozitivele mobile moderne; fără el, același fișier poate dura 200–400 ms per interogare de placă.

PMTiles: format cu acces aleator într-un singur fișier

PMTiles a fost dezvoltat de Protomaps ca o alternativă optimizată pentru cloud la MBTiles, proiectată pentru a servi plăci direct din stocarea de obiecte (S3, GCS, Azure Blob) folosind cereri HTTP de interval — fără server de plăci. Un singur fișier PMTiles conține toate plăcile plus un index intern care permite localizarea oricărei plăci cu cel mult două cereri HTTP de interval indiferent de dimensiunea totală a fișierului.

Pentru deploymentul integrat tactic, proprietățile de optimizare cloud ale PMTiles se traduc în avantaje diferite: fără overhead SQLite, fără contențiune de blocare SQLite când mai multe procese accesează fișierul simultan și o implementare de citire mai simplă deoarece formatul este proiectat în jurul citirilor secvențiale de intervale de octeți mai degrabă decât a interogărilor SQL. Specificația PMTiles este complet open și există implementări pentru Android, iOS și JavaScript.

Structura internă PMTiles constă dintr-un header fix de 127 octeți, un director rădăcină (indexul de nivel superior) și directoare frunze (sub-indexuri pentru fișiere mari). Fiecare intrare de director mapează o coordonată a plăcii (codificată ca indice de curbă Hilbert pentru localitate spațială) la un offset de octeți și lungime în cadrul fișierului. Codificarea curbei Hilbert asigură că plăcile spațial adiacente sunt stocate aproape unele de altele în fișier, îmbunătățind performanța cache-ului read-ahead când un operator panoramează continuu pe hartă.

Compromisul: PMTiles este imutabil prin proiectare. Adăugarea sau înlocuirea plăcilor individuale necesită rescrierea fișierului. Pentru aplicațiile tactice unde pachetul de hărți este înlocuit ca unitate completă — descărcați un fișier nou, înlocuiți-l pe cel vechi — aceasta nu este o problemă. Pentru aplicațiile care trebuie să patch-uiască plăci individuale, MBTiles este mai adecvat.

Generarea plăcilor: tippecanoe, MapTiler, GDAL

tippecanoe este instrumentul standard pentru generarea plăcilor vectoriale din date sursă GeoJSON, FlatGeobuf sau GeoPackage. Algoritmul său de simplificare a plăcilor este special proiectat pentru a produce plăci utile la fiecare nivel de zoom: la niveluri de zoom inferioare, geometriile complexe sunt simplificate și caracteristicile mici sunt eliminate; la niveluri de zoom superioare, detaliul complet este păstrat. Pentru aplicațiile tactice, parametrii cheie tippecanoe sunt --maximum-zoom (de obicei 16 pentru utilizarea infanteriei, 12–14 pentru operațiunile cu vehicule), --minimum-zoom (0 pentru prezentarea generală a zonei, 6–8 pentru a evita fișierele inutil de mari) și --coalesce-fraction-as-needed (îmbinarea poligoanelor mici la niveluri de zoom inferioare pentru a preveni depășirea dimensiunii plăcilor).

MapTiler Engine (anterior GDAL2Tiles) gestionează generarea plăcilor raster: imagini orto, raster satelit, DTED teren. Parametrii cheie sunt formatul plăcii de ieșire (PNG pentru imagini cu transparență, JPEG pentru raster pur la calitate 75–85, WebP pentru dimensiune mai mică a fișierului), sistemul de referință al coordonatelor sursei (MapTiler gestionează reproiecția din orice CRS susținut de GDAL la Web Mercator standard EPSG:3857) și intervalul de zoom.

Scriptul gdal2tiles.py al GDAL oferă capabilități similare de generare a plăcilor raster fără cost. Pentru rastere sursă mari (ortoimagini la scară de țară la rezoluție de 0,5 m), timpul de generare este semnificativ — 8–16 ore pentru un set complet de plăci de țară pe o singură stație de lucru. Paralelizarea pe mai multe nuclee cu flag-ul --processes N reduce aceasta proporțional.

Strategii de actualizare parțială

Înlocuirea completă a pachetului de hărți este costisitoare operațional. Un fișier MBTiles de 15 GB la scară de țară nu poate fi re-descărcat de fiecare dată când o zonă mică este actualizată. Strategiile de actualizare parțială abordează aceasta cu pachete delta — fișiere MBTiles care conțin doar plăcile modificate.

Generarea unui pachet delta necesită compararea versiunii curente a fiecărei plăci (identificată printr-un hash al tile_data sale) față de versiunea anterioară. Plăcile al căror hash s-a schimbat sunt incluse în delta; plăcile nemodificate sunt omise. Operația de îmbinare pe dispozitiv folosește sintaxa INSERT OR REPLACE INTO tiles a SQLite, care actualizează plăcile existente după cheia lor primară și inserează altele noi într-o singură operație.

Pentru plăcile vectoriale, este posibilă o abordare mai sofisticată de diferențiere: calculați diferența dintre geometriile caracteristicilor și atribute la nivelul GeoJSON înainte de generarea plăcilor, apoi generați plăci doar pentru casetele delimitatoare ale caracteristicilor modificate. Aceasta produce pachete delta mai mici când actualizările sunt geografic dispersate, dar necesită ca serverul să mențină versiunea anterioară a tuturor GeoJSON-urilor sursă pentru comparație.

Urmărirea versiunilor necesită o schemă de versionare în metadatele MBTiles. Abordarea standard este un câmp version în tabelul de metadate, incrementat cu fiecare lansare completă, și un timestamp last_updated. Clientul dispozitivului compară versiunea sa locală față de versiunea curentă a serverului și descarcă pachete delta secvențial pentru fiecare versiune în urma căreia se află.

Integrarea în Android și iOS

Pe Android, MapLibre GL Native este renderul de hartă open-source standard pentru aplicațiile care necesită suport de plăci vectoriale offline. Acceptă surse MBTiles printr-o implementare personalizată LocalTilesSource pe care aplicația o înregistrează cu stilul hărții. Interogarea plăcilor din baza de date SQLite se întâmplă pe un thread de fundal printr-un pool de thread-uri, ceea ce împiedică încărcările de plăci să blocheze thread-ul UI.

Îmbinarea plăcilor din surse multiple — afișarea plăcilor overlay dintr-o sursă separată deasupra unei hărți de bază dintr-o altă sursă — este suportată în MapLibre prin stivuirea mai multor surse în stilul hărții. O aplicație tactică ar putea afișa un strat raster de bază dintr-un MBTiles cu imagini satelit, un strat overlay vectorial dintr-un MBTiles cu caracteristici de teren și un strat de adnotare dinamică din propria bază de date SQLite a aplicației, toate randate simultan în ordinea corectă de desenare.

Informație cheie: Cea mai semnificativă decizie de ambalare din punct de vedere operațional este selectarea nivelului de zoom. Ambalarea nivelurilor de zoom 0–18 pentru un deployment la scară de țară produce fișiere de 10–50x mai mari decât nivelurile de zoom 6–16. Pentru utilizarea infanteriei terestre, nivelurile de zoom 8–17 sunt intervalul operațional. Pentru operațiunile cu vehicule, 6–15. Nu ambalați niciodată mai multe niveluri de zoom decât cere cerința operațională — stocarea este o resursă finită pe dispozitivele tactice.