Offline-kartat eivät ole valinnaisia taktisissa sovelluksissa. Kiistellyissä tai syrjäisissä ympäristöissä toimivat operaattorit eivät voi luottaa tilapalvelimiin. Karttatietopakettin on oltava laitteella, kyselyttävissä ilman internet-yhteyttä ja riittävän pieni mahtuakseen käytettävissä olevaan tallennustilaan. Kaksi tileiden pakkausmuotoa hallitsee taktista käyttöä: MBTiles, vakiintunut SQLite-pohjainen standardi, ja PMTiles, uudempi yksibitinen muoto, joka on suunniteltu pilvioptimoituun satunnaisaksesiin ja toimii myös hyvin upotettuun käyttöönottoon.

Niiden välillä valitseminen — ja ymmärtäminen, miten offline-karttapaketteja generoidaan, toimitetaan ja päivitetään — on käytännöllinen insinöörointipäätös merkittävillä operatiivisilla seurauksilla. Operaattori, joka loppuu tallennustilasta, koska karttapaketti oli tarpeettoman suuri, tai joka ei pysty näkemään tiettyä aluetta, koska pakatut zoomitasot olivat vääriä, on kärsinyt offline-karttojen logistiikan epäonnistumisesta.

MBTiles-muoto: SQLite-konttirakenne

MBTiles on Mapboxin ylläpitämä avoin spesifikaatio, joka pakkaa karttatiileet — rasteri tai vektori — SQLite-tietokantaan. Tietokantaskeema on minimaalinen: kaksi vaadituksi taulua ja yksi valinnainen.

tiles-taulu tallentaa todellisen tiili-datan: zoom_level INTEGER, tile_column INTEGER, tile_row INTEGER ja tile_data BLOB. Tiilikoordinaattijärjestelmä käyttää TMS (Tile Map Service) -käytäntöä, jossa Y-akseli on käänetty suhteessa yleisempään XYZ-käytäntöön, jota verkkokarttapalvelut käyttävät — tile_row = (2^zoom - 1) - y. Tämä kääntyminen on yleinen virheiden lähde integroitaessa MBTilesiä karttakirjastoihin, jotka käyttävät XYZ-koordinaatteja.

metadata-taulu tallentaa avain-arvo-pareja, jotka kuvaavat tileset-kokoelmaa: name (näyttönimi), type (overlay tai baselayer), version, description, format (png, jpg tai pbf vektoritiileille), bounds (rajoituslaatikko WGS84:ssä), center (oletusnäkymä) ja minzoom/maxzoom. Vektoritiileiden MBTilesille vaaditaan kaksi lisämetadata-avainta: json (TileJSON-tyylinen kerrosskeema) ja vector_layers (kerroskohtaiset attribuuttimäärittelyt).

MBTilesin suorituskykyominaisuudet riippuvat vahvasti käyttömalleista. Peräkkäiset tiililuvut (rasterilataus panoroinnin/zoomauksen yhteydessä) ovat nopeita, koska SQLiten B-puu-indeksit ovat tehokkaita aluekkyselyihin. Yhdistetty indeksi (zoom_level, tile_column, tile_row) on kriittinen suorituskykyindeksi — ilman sitä yksittäiset tiilikysely häiriintyvät täydeksi taulun skannaamiseksi tietokannan kasvaessa. 10 GB:n MBTiles-tiedosto, joka kattaa maan zoomitasoilla 0–16 tällä indeksillä, toimii riittävästi moderneilla mobiililaitteilla; ilman sitä sama tiedosto voi kestää 200–400 ms per tiilikysy.

PMTiles: yksibitinen satunnaisaksesimuoto

PMTiles kehitettiin Protomapsin toimesta pilvioptimoituna vaihtoehtona MBTilesille, suunniteltu toimittamaan tiileitä suoraan objektitallennuksesta (S3, GCS, Azure Blob) HTTP-aluekyselyjen avulla — ilman tilapalvelinta. Yksi PMTiles-tiedosto sisältää kaikki tiileet plus sisäisen indeksin, joka mahdollistaa minkä tahansa tiilin löytämisen enintään kahdella HTTP-aluekyselyllä riippumatta tiedoston kokonaislajista.

Taktisessa upotettussa käyttöönotossa PMTilesin pilvioptimoituihin ominaisuuksiin liittyvät eri edut: ei SQLite-ylikuormaa, ei SQLite-lukitusristiriitoja kun useita prosesseja käyttää tiedostoa samanaikaisesti, ja yksinkertaisempi lukuluominen, koska muoto on suunniteltu peräkkäisten tavualuelukujen ympärille SQL-kyselyjen sijaan. PMTiles-spesifikaatio on täysin avoin ja toteutuksia on Android:lle, iOS:lle ja JavaScriptille.

PMTilesin sisäinen rakenne koostuu kiinteästä 127-tavuisesta otsake, juurihakemistosta (ylätason indeksi) ja lehtihakemistoista (alindeksit suurille tiedostoille). Jokainen hakemistokirjaus kartoittaa tiilikoordinaatin (koodattu Hilbert-käyrä-indeksinä spatiaaliselle lokaliteetille) tavusiirtymäksi ja pituudeksi tiedoston sisällä. Hilbert-käyrä-koodaus varmistaa, että spatiaalisesti vierekkäiset tiileet tallennetaan lähelle toisiaan tiedostossa, parantaen read-ahead-välimuistin suorituskykyä operaattorin panoroidessa jatkuvasti kartan yli.

Kompromissi: PMTiles on suunnittelultaan muuttumaton. Yksittäisten tiileiden lisääminen tai korvaaminen vaatii tiedoston uudelleenkirjoittamista. Taktisille sovelluksille, joissa karttatietopaketti korvataan kokonaisena yksikkönä — lataa uusi tiedosto, korvaa vanha — tämä ei ole ongelma. Sovelluksille, jotka tarvitsevat korjata yksittäisiä tiileitä, MBTiles on sopivampi.

Tiileiden generointi: tippecanoe, MapTiler, GDAL

tippecanoe on standardityökalu vektoritiileiden generointiin GeoJSON-, FlatGeobuf- tai GeoPackage-lähdeaineistosta. Sen tiileiden yksinkertaistamisalgoritmi on suunniteltu erityisesti tuottamaan käyttökelpoisia tiileitä jokaisella zoomitasolla: matalilla zoomitasoilla monimutkaisia geometrioita yksinkertaistetaan ja pieniä piirteitä pudotetaan; korkeilla zoomitasoilla täysi yksityiskohta säilyy. Taktisille sovelluksille tärkeimmät tippecanoe-parametrit ovat --maximum-zoom (tyypillisesti 16 jalkaväkikäyttöön, 12–14 ajoneuvoon), --minimum-zoom (0 alueen yleiskatsaukseen, 6–8 turhaan suurten tiedostojen välttämiseksi) ja --coalesce-fraction-as-needed (yhdistä pieniä polygoneja matalilla zoomitasoilla tiilikokoylityksen estämiseksi).

MapTiler Engine (aiemmin GDAL2Tiles) käsittelee rasteritiileiden generoinnin: ortokuvat, satelliittirasteri, DTED-maasto. Tärkeimmät parametrit ovat lähdön tiliemuoto (PNG kuvantamiselle läpinäkyvyydellä, JPEG puhtaalle rasterille 75–85 laadulla, WebP pienemmälle tiedostokoolle), lähteen koordinaattireferenssijärjestelmä (MapTiler käsittelee uudelleenprojektion mistä tahansa GDAL-tuetusta CRS:stä vakiowebmerkator EPSG:3857:ään) ja zoomialue.

GDAL:n gdal2tiles.py-skripti tarjoaa vastaavat rasteritiileiden generointikyvykkyydet ilmaiseksi. Suurille lähderasterille (kansallinen ortokuvaus 0,5 m:n resoluutiolla) generointiaika on merkittävä — 8–16 tuntia täydelliselle maan tilesetille yhdellä työasemalla. Rinnakkaistaminen useisiin ytimiin --processes N -lipulla vähentää tätä suhteellisesti.

Osittaiset päivitysstrategiat

Täyden karttapaketin korvaaminen on operatiivisesti kallista. 15 GB:n kansallista MBTiles-tiedostoa ei voida ladata uudelleen joka kerta, kun pieni alue päivitetään. Osittaiset päivitysstrategiat käsittelevät tätä deltapaketeilla — MBTiles-tiedostoilla, jotka sisältävät vain muuttuneet tiileet.

Deltapaketin generoiminen vaatii jokaisen tiilin nykyversion vertailua (tiedostot tunnistaen tile_data-tiivisteen mukaan) edelliseen versioon. Tiileet, joiden tiiviste on muuttunut, sisällytetään deltaan; muuttumattomat tiileet jätetään pois. Yhdistysoperaatio laitteella käyttää SQLiten INSERT OR REPLACE INTO tiles -syntaksia, joka päivittää tai lisää rivit ensisijaisella avaimella yhdessä operaatiossa.

Vektoritiileille on mahdollinen kehittyneempi diffing-lähestymistapa: laske ero piirregeometrioiden ja attribuuttien välillä GeoJSON-tasolla ennen tiileiden generointia, sitten generoi tiileet vain muuttuneiden piirteiden rajoituslaatikoille. Tämä tuottaa pienempiä deltapaketteja, kun päivitykset ovat maantieteellisesti harvaluontoiset, mutta vaatii palvelimen ylläpitävän kaikkien lähtö-GeoJSON:ien edellinen versio vertailua varten.

Versiosseuranta vaatii versioinnin MBTiles-metadataan. Vakiomalli on version-kenttä metadatataulussa, kasvaa jokaisen täyden julkaisun myötä, ja last_updated-aikaleima. Laiteohjelma vertaa paikallista versiotaan palvelimen nykyiseen versioon ja lataa deltapaketteja peräkkäin jokaiselle versiolle, jota se on jäljessä.

Integraatio Androidissa ja iOS:ssä

Androidilla MapLibre GL Native on vakio avoimen lähdekoodin karttarenderöijä sovelluksille, jotka vaativat offline-vektoritiilitukea. Se hyväksyy MBTiles-lähteet mukautetun LocalTilesSource-toteutuksen kautta, jonka sovellus rekisteröi karttatyylin kanssa. Tiileiden kyseleminen SQLite-tietokannasta tapahtuu taustaketjussa säiealtaan kautta, mikä estää tiililatauksien estämistä käyttöliittymäketjua.

Monilähteinen tiilienyhdistäminen — peittokuvatileiden näyttäminen erillisestä lähteestä pohjoiskartan päälle toisesta — on tuettu MapLibressa pinoamalla useita lähteitä karttatyyliin. Taktinen sovellus voi näyttää pohjarasteritason satelliittikuva-MBTilesista, vektori-peittokuvatason maastopiirteiden MBTilesista ja dynaamisen merkintätason sovelluksen omasta SQLite-tietokannasta, kaikki renderöidään samanaikaisesti oikeassa piirtojärjestyksessä.

Keskeinen oivallus: Operatiivisesti merkittävin pakkauspäätös on zoomitasojen valinta. Zoomitasojen 0–18 pakkaaminen kansalliseen käyttöönottoon tuottaa 10–50-kertaisesti suurempia tiedostoja kuin zoomitasot 6–16. Jalkainfanteriakäyttöön zoomitasot 8–17 ovat operatiivinen alue. Ajoneuvoon 6–15. Älä koskaan pakkaa enemmän zoomitasoja kuin operatiivinen vaatimus edellyttää — tallennus on äärellinen resurssi taktisilla laitteilla.