Originariamente inviato da valia
fammi capire un po (perché forse qualcosa puoi fare), in realtà cosa devi fare?
A quanto ho capito tu hai una serie di punti e da questi crei un percorso, ma per ogni punto tu hai un oggetto (la lista/mappa delle rotte).
Quindi se tu hai un punto (es. il punto 100) vai a colpo sicuro a prendere l'oggetto associato alla chiave 100 e da questo hai le rotte, alla fine una struttura di dimensioni ridotte.
Scrivere su file non aiuta perché in pratica metti la roba in memoria per poi scaricarla (e non subito).
Dovrei avere più dettagli per dare altri consigli, senza saper leggere/scrivere ti dico questo
La cosa è più complessa.
Ho una mappa su cui i punti sono caratterizzati da longitudine, latitudine e tipo. Dato che devo fare una rotta di navigazioni per nave sostanzialmente il tipo mi serve per capire se è navigabile oppure no. Lo scopo principale infatti è date due rilevazioni, una velocità ed un tempo di navigazione (quindi lo spazio percorso) cercare di ricostruirsi una rotta probabile.
A dirla tutta l'utente deve poter scegliere se lavorare direttamente al massimo del dettaglio, ovvero la mappa reale, oppure raggruppare più punti della mappa in una cella e quindi lavorare con minor dettaglio.
Ora se l'utente lavora con minor dettaglio io sono felice perché raggruppando più dati assieme diminuisce anche il carico in memoria però mi è stato detto di dare anche la possibilità di lavorare al massimo della risoluzione.
Ora con una mappa di prova (isola del giglio e dintorni, guarda un po') nemmeno troppo estesa, e con una rotta che non copre manco tutta la mappa mi è capitato di avere a che fare con circa 500.000 punti (e stiamo parlando di mappa piccola e rotta piccola).
All'inizio avevo pensato ad un bel grafo con dei bei nodi, dei bei archi e tutto, peccato che se i nodi erano tanti gli archi erano tantissimi. Poi ho provato un hashmap ma niente nemmeno li. La soluzione finale è che semplicemente mi calcolo dinamicamente solo i punti della mappa che valuto realmente per l'algoritmo di visita, me li tengo "così" in una lista (visto che lavoro su un algoritmo di visita tipo grafo e quindi devo scorrere una lista di adiacenti) e stop. Peccato che anche così si arrivano a creare rotte lunghissime.
Stavo quindi pensando ad una cosa:
Potrei calcolarmi una rotta con una bassissima risoluzione in modo da avere dei punti intermedi, poi tra quei punti intermedi potrei calcolarmi una mappa a risoluzione più alta.
Per farlo però mi servirebbe un qualche modo per salvarmi a parte i risultati intermedi (ed ecco l'idea del file) e poi liberare la memoria.
La memoria cosi che risparmierei sarebbe enorme, perché nell'algoritmo di visita i vari oggetti per costruire la rotta mi allocano memoria per tutti i punti presi in considerazione anche se poi non li sceglie come rotta. Però non saprei proprio come fare in java![]()


) nemmeno troppo estesa, e con una rotta che non copre manco tutta la mappa mi è capitato di avere a che fare con circa 500.000 punti (e stiamo parlando di mappa piccola e rotta piccola).
Rispondi quotando