Guida all'uso e best practice per le mappe multiple
Nello sviluppo di applicazioni Mega, è comune chiedersi se aggiungere più mappe (Block) in una libreria di posizionamento. Un uso errato delle mappe multiple non solo non migliora le capacità dell'applicazione, ma può anche causare cali di prestazioni e salti nel posizionamento.
Questa guida ti aiuterà a comprendere e utilizzare correttamente la funzionalità delle mappe multiple, evitando errori comuni.
Perché evitare di aggiungere più mappe?
Principio fondamentale: non aggiungere più mappe per "ampliare la copertura".
Nella maggior parte dei casi, una libreria di posizionamento dovrebbe contenere un solo Block Mega per luogo. Ecco alcuni usi errati comuni da evitare:
Scenario errato a: più aree
- Intenzione: creare mappe separate per "Area A", "Area B" e "Area C" di un sito turistico interconnesso, aggiungendole tutte alla libreria sperando che l'utente passi senza soluzione di continuità tra le aree.
- Problema: queste tre mappe sono matematicamente indipendenti e non correlate spazialmente. Coordinate incoerenti impediscono una transizione fluida, causando salti di posizionamento ai confini.
- Soluzione: per questi scenari, segui il metodo di acquisizione dati per spazi ampi acquisendo "Area A", "Area B" e "Area C" con zone sovrapposte sufficienti. Esegui la generazione della mappa come descritto in task di fusione per aree ampie. Questo produrrà un singolo Block con tutte le aree in un sistema di coordinate unificato da aggiungere alla libreria.
Scenario errato b: più luoghi
- Intenzione: creare una mappa per un centro commerciale in un luogo e un'altra per un centro commerciale omonimo in un luogo diverso, sperando di usarle entrambe in un'unica app.
- Problema: rallenta significativamente il posizionamento. Il dispositivo deve confrontare tutti i dati delle mappe contemporaneamente, aumentando il calcolo e allungando l'inizializzazione. L'utente è fisicamente in un solo centro commerciale alla volta; caricare l'altra mappa è uno spreco di risorse. Picchi di richieste per un centro rallenteranno anche le risposte per l'altro.
- Soluzione: crea librerie di posizionamento separate per ogni luogo, ciascuna con una sola mappa. Nell'app, accedi dinamicamente alla libreria corretta in base alla posizione corrente dell'utente.
Scenario errato c: momenti diversi
- Intenzione: acquisire e generare una mappa dello stesso luogo di giorno e un'altra di notte, aggiungendole entrambe alla libreria per un'esperienza coerente in momenti diversi.
- Problema: simile allo Scenario A, le mappe generate separatamente non garantiscono relazioni spaziali.
- Soluzione: unisci le acquisizioni diurne e notturne in un unico task di fusione come in task di fusione per aree ampie. Aggiungi il singolo Block risultante alla libreria di posizionamento.
Scenario errato d: versioni diverse
- Intenzione: aggiungere una nuova versione B della mappa di un luogo (dopo aver già utilizzato la versione A) alla stessa libreria, sperando di usare la nuova mappa senza ripubblicare l'app.
- Problema: il posizionamento salterà tra le due versioni della stessa area.
- Soluzione: aggiorna la mappa vecchia seguendo l'aggiornamento completo senza perdite per mantenere il sistema di coordinate. Dopo aver aggiunto la nuova mappa, rimuovi quella vecchia dalla libreria.
Scenario errato e: aggiornamento incrementale
- Intenzione: dopo aver usato una mappa versione A di un luogo, creare una nuova mappa B per una piccola area modificata o aggiunta e aggiungerla alla libreria originale.
- Problema: la nuova mappa B non è correlata spazialmente alla mappa A originale, causando salti di posizionamento tra dati vecchi e nuovi.
- Soluzione: esegui un aggiornamento incrementale per integrare la nuova area mantenendo il sistema di coordinate. Dopo l'aggiornamento, rimuovi la mappa originale dalla libreria.
Riassunto: Tentare di "cucire" piccole mappe in un mondo più grande non è adatto alle mappe ad alta precisione Mega. La filosofia Mega è una rappresentazione 3D ad alta precisione, spazialmente continua, con coordinate unificate e coerenza spazio-temporale.
Scenari che giustificano più mappe
Quando è davvero necessario aggiungere più Block a una libreria? Principalmente per "task paralleli" o "selezione multi-spazio", non per "giunzione spaziale".
Scenario uno: selezione multi-spazio
- Descrizione: la tua app serve aree completamente diverse dello stesso luogo (es. piani diversi di un ospedale), ma vincoli strutturali o pratici impediscono la connessione dei dati tra aree. L'utente deve selezionare l'area corrente.
- Implementazione: dopo la selezione dell'utente, usa questa informazione a priori per attivare dinamicamente la singola mappa corrispondente. In ogni momento, solo una mappa partecipa al calcolo del posizionamento. Al cambio area, l'utente deve riconfermare la selezione.
Scenario due: task paralleli
- Descrizione: la tua app deve tracciare più oggetti indipendenti e conosciuti nello stesso luogo, senza relazione tra loro e con caratteristiche molto diverse (es. reperti in un museo).
- Implementazione: crea una mappa separata per ogni oggetto e aggiungi queste "mappe oggetto" a una libreria di posizionamento. Nota: le prestazioni dipenderanno dal numero di oggetti. Per molti oggetti, bilancia prestazioni e numero di librerie, eventualmente creando più librerie raggruppate per categoria.
Comportamento del rendering con più mappe
Quando si usano più mappe per il posizionamento, il rendering 3D varia per piattaforma e versione.
Best practice suggerite
Se rientri negli scenari descritti in Scenari che giustificano più mappe o devi usare più mappe, segui questi principi:
- Attivazione su richiesta: carica i contenuti 3D corrispondenti solo quando l'utente effettua una scelta o entra in un'area specifica, fornendo informazioni a priori nelle richieste di posizionamento.
- Cambio dinamico: fornisci un'interfaccia chiara per la selezione dello scenario. Prima di caricare i contenuti 3D di una nuova mappa, scarica quelli della mappa precedente per liberare memoria.
- Gestione dello stato: gestisci esplicitamente la mappa attualmente attiva nel codice. Monitora il Block ID nei risultati di posizionamento per distinguere il feedback tra mappe diverse.
- Monitoraggio prestazioni: con più mappe, controlla attentamente l'utilizzo della memoria, la latenza del posizionamento e il consumo energetico sul dispositivo per garantire fluidità.
In sintesi, per la maggior parte delle applicazioni, seguire il principio "uno scenario, una mappa" è la scelta migliore per garantire prestazioni e stabilità del posizionamento Mega.