UNIVERSITA’ DEGLI STUDI DI TRIESTE                        A.A. 2011/2012          UNIVERSITA’ DEGLI STUDI DI TRIESTE      ...
INDICE1. INTRODUZIONE                                            42. ANALISI                                              ...
L’obiettivo della presente tesi è quello di documentare la realizzazione di un’applicazione,per dispositivi mobili, che pe...
1. INTRODUZIONENell’ultimo decennio, l’Europa è stata coinvolta in un numero crescente di eventicatastrofici dovuti a feno...
Un altro tipo di evento catastrofico è la valanga, che è costituita da masse nevose che sidistaccano dai pendii di un rili...
L’attività di gestione e di riduzione del rischio di un disastro, in Europa, si è spostata da unapproccio orientato unicam...
Sulla base delle considerazioni appena introdotte, è necessario ora concentrarsi sullagestione e sulla visualizzazione del...
Partendo da ciò, lo scopo della presente tesi è quello di ampliare e migliorare taleapplicazione, introducendo un’ulterior...
2. ANALISI2.1 CAP – Common Alerting ProtocolIl CAP (Common Alerting Protocol = Protocollo di avviso comune) è il primo sta...
La struttura del messaggio è articolata in quattro blocchi principali, chiamati segmenti, iquali, a loro volta, contegono ...
Quindi riassumendo, le informazioni di interesse sono che l’elemento <polygon> contieneuna serie di coppie di coordinate c...
o La DESCRIZIONE DELLE RISORSE fornisce le informazioni riguardanti le risorse   umane, la loro eventuale disponibilità, l...
2.3 JIXEL - Applicazione software per lo scambio datiLo schema generale, per la risposta ad una situazione di rischio, nec...
Il CAP Generator permette di creare e condividere i dati sull’incidente attraverso l’utilizzodi un’interfaccia grafica int...
Infine, il CAP Viewer ha il compito di visualizzare, filtrare e raggruppare, su un’interfacciageografica, le informazioni ...
3. PROGETTAZIONE3.1 DEFINIZIONE DEI REQUISITISulla base delle considerazioni fatte finora, l’applicazione dovrà essere in ...
La piattaforma Java ME è organizzata in virtual machine, con configurazioni, profili edAPI opzionali, che opportunamente c...
- center : definisce il centro della mappa, equidistante da tutti i bordi della mappa;  questo parametro può assumere una ...
il parametro center, e/o di allegare un qualsiasi marcatore opzionale sulla mappa,utilizzando il parametro marker.Le Googl...
mentre la seconda è l’analisi del documento XML e l’estrazione di informazioni per lacreazione della mappa.L’applicazione ...
Fig.10: Esempio di struttura XML di un messaggio di allerta per una franaCome evento valanghivo, ci si è concentrati sulla...
Come si può notare da questi tre esempi di messaggi CAP, il codice XML, da cui sonocomposti, è articolato a livelli; il li...
La classe CapViewer ha il compito di gestire l’interfaccia grafica dell’applicazione, per lavisualizzazione delle informaz...
La classe loadImage è composta da un unico metodo (operations) loadImage(), che hail compito di aprire una connessione htt...
4. REALIZZAZIONE4.1 INTERFACCIA GRAFICAAll’avvio dell’applicazione, l’interfaccia grafica si presenta come di seguito:    ...
In altre parole, la visualizzazione degli elementi testuali che compongono il messaggioCAP, che giunge al dispositivo mobi...
che offre l’utilizzo di un oggetto, quale la mappa, per affrontare nel modo migliore unevento d’emergenza.Prendiamo ora in...
Grazie alle coordinate esatte del luogo colpito, è possibile individuare sulla mappa il luogopreciso a cui fa riferimento ...
Infine esaminiamo la mappa, associata al codice XML relativo all’evento franoso che hacolpito il paese di San Fratello in ...
Fig.18: Visualizzazione dell’immagine vuotaIn tutti questi esempi, sulle schermate in cui vengono caricate le immagini del...
4.2.1 Funzionamento generaleUna volta avviata l’applicazione, si definisce il nome del file XML che dovrà essereutilizzato...
schermata in cui, oltre alla mappa, comparirà anche il tasto “Back” che permetteràall’utente di ritornare alla schermata p...
questo oggetto, ciò significa che il comando contiene solamente le informazioni sul‘comando’ e non l’azione reale che si v...
messaggio, risulta essere vuota, e al tempo stesso la stringa pol, che rappresenta leinformazioni contenute nell’elemento ...
Le seguenti tre linee, [81,83], hanno il compito di completare il Form frmMap inserendo alsuo interno imageItem, cioè l’im...
4.2.4 La classe AnalisiXMLTutti i numeri di linea di codice, contenuti in questo paragrafo, fanno riferimentoall’Appendice...
A questo punto si assegna alla variabile root l’elemento radice del codice XML, e grazie aquesto elemento, si può avviare ...
4.2.5 La classe loadImageTutti i numeri di linea di codice, contenuti in questo paragrafo, fanno riferimentoall’Appendice ...
Alla linea [30] si definisce un elemento di tipo DataInputStream, che permetteall’applicazione di leggere i dati primitivi...
CONCLUSIONIIn questo capitolo si verifica se gli obiettivi, che sono stati prefissati all’inizio di questoprogetto di tesi...
dispositivo che è in grado di utilizzare la Java Virtual Machine, responsabile del   caricamento del codice, dell’isolamen...
BIBLIOGRAFIA[1] Disaster Risk Reduction Strategies and Risk Management Practices: Critical Elements for    Adaptation to C...
[12] Simone Maver, Tesi Ingegneria Informatica : “Formato e trasmissione di messaggi di allerta    per la gestione di emer...
Appendice A – classe CapViewer1    package CapViewer;23    import javax.microedition.lcdui.*;4    import javax.microeditio...
47         si2 = new StringItem("", "");4849         frm.append(si);50         frm2.append(si2);51         }5253   public ...
96            int list_level;97    if( d == select1){98         list_level = 1;99         String selection = select1.getSt...
Appendice B – Classe MsgParser1    package CapViewer;23    import java.io.IOException;4    import java.io.InputStream;5   ...
47         v_str.addElement(root.getElement(el_name).getText());48   } else if(el_name.equals("info")){49        for(int j...
96                              v_str.addElement("-"+root.getElement("info").getElement97                             (el_...
Appendice C – classe AnalisiXML1    // Analisi del documento XML per lestrazione delle informazioni necessarie alla2    //...
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta
Upcoming SlideShare
Loading in …5
×

Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta

1,660 views

Published on

1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
1,660
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
33
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Sviluppo di un applicativo su dispositivo mobile per la visualizzazione su mappe georeferenziate di messaggi di allerta

  1. 1. UNIVERSITA’ DEGLI STUDI DI TRIESTE A.A. 2011/2012 UNIVERSITA’ DEGLI STUDI DI TRIESTE FACOLTA’ DI INGEGNERIA TESI DI INGEGNERIA INFORMATICA Sviluppo di un applicativo su dispositivo mobile per lavisualizzazione su mappe georeferenziate di messaggi di allertaRelatore :Prof. Ing. Raffaela CefaloDipartimento di ingegneria e architetturaUniversità degli studi di Trieste Laureanda: Cramastetter Sabrina Corso di studi in ingegneria informatica Università degli studi di Trieste
  2. 2. INDICE1. INTRODUZIONE 42. ANALISI 9 2.1 CAP –Common Alerting Protocol 9 2.2 TSO – Tactical Situation Object 11 2.3 JIXEL – Applicazione software per lo scambio dati 133. PROGETTAZIONE 16 3.1 DEFINIZIONE DEI REQUISITI 16 3.2 SCELTA DELLE TECNOLOGIE 16 3.3 STRUTTURA DELL’APPLICAZIONE 194. REALIZZAZIONE 25 4.1 INTERFACCIA GRAFICA 25 4.2 IMPLEMENTAZIONE 30 4.2.1 Funzionamento generale 30 4.2.2 La classe CapViewer 32 4.2.3 La classe MsgParser 35 4.2.4 La classe AnalisiXML 36 4.2.5 La classe loadImage 38CONCLUSIONI 40BIBLIOGRAFIA 42APPENDICE A – classe CapViewer 44APPENDICE B – classe MsgParser 47APPENDICE C – classe AnalisiXML 50APPENDICE D – classe loadImage 53APPENDICE E – Struttura e dizionario del TSO 55 2
  3. 3. L’obiettivo della presente tesi è quello di documentare la realizzazione di un’applicazione,per dispositivi mobili, che permetta la visualizzazione di una mappa contenente leinformazioni georiferite, descritte in un messaggio di allerta, che identificano la zonainteressata dall’evento.Questo progetto si basa su un’applicazione precedentemente realizzata come tesi, e siconcentra sul miglioramento e ampliamento di questa, inserendo appunto la funzionalitàsopra descritta.Questo documento inizia con una breve descrizione generale degli eventi naturali disastrosiche interessano maggiormente il suolo italiano, i quali sono frane, terremoti e valanghe.Concentrandosi su questi eventi pericolosi, si affronta poi una breve analisi dei formati diinterscambio dati esistenti, che permettono la distribuzione delle informazioni tra glioperatori di soccorso durante queste situazioni di emergenza; esistono diverse applicazionisoftware che utilizzano questi formati per raccogliere e distribuire messaggi d’allerta, comeil Jixel, che è stata fonte di ispirazione per questa tesi.Si passa poi al progetto vero e proprio, con la definizione dei requisiti che dovrà averel’applicazione, e sulla base di questi, si effettuano le opportune scelte che riguardano letecnologie da utilizzare.Dopo una breve panoramica sulla struttura generale che avrà l’applicazione, ci si concentrasulla struttura del codice Java che ha permesso la realizzazione di tale applicazione,offrendo anche il risultato finale di tale funzionalità, cioè la visualizzazione sul dispositivomobile della mappa nei tre possibili casi di evento di emergenza sui quali ci siamoconcentrati. 3
  4. 4. 1. INTRODUZIONENell’ultimo decennio, l’Europa è stata coinvolta in un numero crescente di eventicatastrofici dovuti a fenomeni e ad incidenti di carattere naturale, causati da una particolarecombinazione di cambiamenti ed evoluzioni climatiche e territoriali.Il territorio europeo è caratterizzato da particolari proprietà geofisiche e climatiche, che lorendono suscettibile ad una vasta gamma di eventi naturali estremi e pericolosi pericolosi.Frane, valanghe e terremoti sono fenomeni naturali ed ordinari, responsabili da sempre, responsabili,dell’evoluzione del territorio e del suo paesaggio, e proprio su questi eventi si concentra ilpresente progetto. Fig. 1: Numero di eventi disastrosi rilevati tra il 1980 e il 2009 in Europa Europa.I dissesti franosi sono sicuramente tra i fenomeni naturali più eclatanti e pericolosi; la franaè un ‘processo geomorfologico’ che indica un movimento di una massa di roccia, terra odetrito, lungo un versante.Le frane, a causa della loro alta pericolosità, in alcune zone abitate, devono essere oggettodi attenti studi e continui monitoraggi per tenere sotto controllo il territorio e perindividuare, il prima possibile, eventuali cambiamenti sospetti. Sono dei fenomeni locali, e imaperciò è particolarmente importante raccogliere tutte le informazioni sul pericolo e rischio,coinvolgendo pienamente le attività presenti come parti interessate nel processo. 4
  5. 5. Un altro tipo di evento catastrofico è la valanga, che è costituita da masse nevose che sidistaccano dai pendii di un rilievo, precipitando verso valle ed accrescendosi di volumedurante il loro percorso. La prevenzione dei pericoli derivanti dalle valanghe, sul territoriomontano, si basa sull’emissione di un bolletino nivometeorologico, che contiene leinformazioni sulla passata evoluzione delle condizioni meteo e del manto nevoso e inoltrele valutazioni sulle possibili valanghe. Fig.2: Scala europea per il pericolo delle valanghe.Per prevedere e prevenire le valanghe, è stata ideata una scala unificata europea, definitanel 1993, che contiene i concetti fondamentali a cui fanno riferimento tutti gli strumenti divalutazione del pericolo per questo fenomeno.L’Italia è uno dei Paesi a maggiore rischio sismico tra quelli affacciati sul Mediterraneo,sia per la frequenza dei terremoti che hanno storicamente interessato il suo territorio, siaper l’intensità che alcuni di essi hanno raggiunto.Anche se le informazioni di base sui terremoti e sul loro impatto sono abbastanza completeed integrate, le banche dati, che riguardano i disastri globali, si potrebbero ulteriormentemigliorare attuando alcuni semplici accorgimenti, come ad esempio la progettazione el’utilizzazione di un approccio standardizzato e sistematico per la valutazione dei costicomplessivi dei terremoti.Per proteggere e salvaguardare la vita dei cittadini e il patrimonio delle comunità, nonbisogna puntare unicamente su soccorsi tempestivi, ma occorre dedicare energie e risorseimportanti alla previsione e alla prevenzione delle calamità. 5
  6. 6. L’attività di gestione e di riduzione del rischio di un disastro, in Europa, si è spostata da unapproccio orientato unicamente alla risposta all’evento di emergenza, verso una gestioneintegrata dei rischi (IRM – Integrated Risk Management) che include la prevenzione, lapreparazione, la risposta e il recupero in una situazione di emergenza. Fig. 3: Schema del ciclo di gestione delle calamità naturali.In Italia, l’attività di previsione di un evento di emergenza è assicurata da un sistema di retiche collega la protezione civile italiana a numerosi centri nazionali di ricerca e di raccoltadi informazioni scientifiche. Questa valuta le situazioni di possibile rischio, allerta ilsistema di intervento con il massimo anticipo utile, ma anche fornisce alle autoritàcoinvolte gli elementi necessari a prendere decisioni ragionate e tempestive, attraversol’utilizzo di messaggi di allerta accurati e completi.Le strategie di riduzione dei rischi di calamità si basano su cinque importanti concetti:1. La riduzione del rischio deve avere una priorità locale e nazionale con una solida base istituzionale per la sua attuazione.2. I rischi di catastrofe devono essere identificati, valutati e monitorari costantemente ed è necessario migliorare l’avvertimento precoce.3. La conoscenza, l’innovazione e l’educazione sono alla base di una cultura del soccorso e della resilienza a tutti i livelli.4. I fattori di rischio sottostanti devono essere ridotti.5. La preparazione a catastrofi deve essere rafforzata per una risposta rapida ed efficace. 6
  7. 7. Sulla base delle considerazioni appena introdotte, è necessario ora concentrarsi sullagestione e sulla visualizzazione delle informazioni che devono pervenire a tutti i soggetticoinvolti nel disastro.Queste informazioni offrono, al soggetto che le riceve sul proprio dispositivo, tutte lenotizie o gli eventuali aggiornamenti di un evento catastrofico in corso; tutto ciò viene catastroficoannunciato con un messaggio di testo che descrive la situazione d’emergenza.Proprio la tempestività, con cui questi messaggi raggiungono tutti i soggetti interessati, èuno degli obiettivi più importanti per limitare e affrontare nel modo migliore talesituazione. Fig. 4: Schema di gestione delle informazioni a seguito di una calamitàIl presente lavoro ha come punto di partenza un progetto già esistente, che è stato creato dauno studente di Ingegneria Informatica come propria tesi triennale; tale progetto si comeconcentrava sulla creazione di un prototipo di un’applicazione in grado di gestire evisualizzare, su un generico dispositivo mobile, il contenuto di un messaggio di allerta.Il formato scelto per la codifica dei messaggi d’allerta, in questo specifico caso, è il CAP(Common Alerting Protocol), che verrà analizzato nelle prossime pagine.L’applicazione di partenza è in grado di visualizzare, sottoforma di righe di testo, i daticontenuti nel messaggio di emergenza, ed utilizzando i tasti del dispositivo mobile, sulquale l’applicazione è in funzione, si possono raggiungere e visualizzare ogni tipo diinformazione contenuta in quel particolare messaggio. 7
  8. 8. Partendo da ciò, lo scopo della presente tesi è quello di ampliare e migliorare taleapplicazione, introducendo un’ulteriore importante funzionalità.Lobiettivo principale è stato quello di visualizzare su dispositivo mobile una mappacontenente linformazione georiferita che identifica la zona interessata dall’evento descrittonel messaggio.Questa documento è articolato come segue: nella prima parte vengono analizzati i formatidi interscambio dati, CAP (paragrafo 2.1) e TSO (paragrafo 2.2), e la loro applicazionesoftware nelle situazioni di emergenza Jixel (paragrafo 2.3), che porteranno ad individuarealcuni dei requisiti dell’applicazione che dovrà essere realizzata.Dopo aver definito tutti i requisiti (paragrafo 3.1), si descrivono le varie tecnologie chesaranno utilizzate per lo sviluppo (paragrado 3.2) e la realizzazione del progetto (paragrafo3.3).Nell’ultima parte di questo documento, l’attenzione si concentra sulla realizzazionedell’applicazione (capitolo 4), soffermandosi sia sull’interfaccia grafica (paragrafo 4.1) siasul suo funzionameno interno (paragrafo 4.2), descrivendo e analizzando il codiceinformatico. 8
  9. 9. 2. ANALISI2.1 CAP – Common Alerting ProtocolIl CAP (Common Alerting Protocol = Protocollo di avviso comune) è il primo standardredatto dal Comitato Tecnico per la Gestione delle Emergenze dell’OASIS (Organizationfor the Advancement of Structured Information Standards), ed è un’attività di interscambiodati, utilizzata per raccogliere tutti gli avvisi di pericolo, con lo scopo di inviare e ricevereinformazioni legate ai sistemi di gestione e diffusione degli allarmi.Il CAP migliora la gestione e la diffusione della consapevolezza dell’evento che richiedel’assistenza di sistemi di emergenza, fornendo allo stesso tempo aggiornamenti continui suun database che gestisce i messaggi di allarme.Il CAP è un formato standard basato sul linguaggio XML per lo scambio di dati inerenti adavvisi pubblici ed ad emergenze tra i vari sistemi di allerta, che permette di inviare unmessaggio di avviso che viene simultaneamente diffuso su molti sistemi di allarme e sumolte applicazioni.L’applicazione principale del messaggio di tipo CAP è quella di fornire un unico formatoin uscita per effettuare l’attivazione di tutti i tipi di sistemi di allarme pubblici, riducendocosì notevolmente il carico di lavoro associato all’utilizzo contemporaneo di più sistemi e,allo stesso tempo, garantisce la consistenza dell’informazione trasmessa su sistemi multiplidi consegna. Fig.5: Struttura del CAP 9
  10. 10. La struttura del messaggio è articolata in quattro blocchi principali, chiamati segmenti, iquali, a loro volta, contegono delle specifiche informazioni riguardanti l’evento diemergenza a cui si riferiscono.I segmenti di un messaggio CAP sono:- <alert> : è il segmento principale sempre presente, e racchiude tutti i sottoelementi del messaggio.- <info> : è un segmento opzionale ed è correlato con <alert>, e contiene gli elementi essenziali per delineare e caratterizzare l’evento che è oggetto del messaggio.- <resource> : è un segmento opzionale ed è correlato con <info>, e contiene gli elementi utilizzati per descrivere i file addizionali correlati al messaggio.- <area> : è un segmento opzionale ed è correlato anch’esso con <info>; contiene le informazioni inerenti alla descrizione dell’area coinvolta nell’evento.Il segmento, che è stato oggetto di studio per lo sviluppo di questo progetto, è stato proprioquest’ultimo, cioè il segmento <area>; infatti, proprio al suo interno, si trovano leinformazioni che verranno utilizzate per localizzare sulla mappa la zona interessatadall’evento.Il segmento <area> è composto da alcuni sottoelementi:- <areaDesc> : è l’unico elemento obbligatorio nel segmento, e contiene una descrizione testuale dell’area di interesse del messaggio.- <polygon> : contiene i punti che definiscono un poligono che delinea l’area di interesse; il poligono geografico è rappresentato da una lista di coppie di coordinate.- <circle> : contiene la coppia di coordinate che localizzano un punto e la lunghezza del raggio in chilometri che delinea l’area circolare interessata.- <geocode> : è il codice geografico che indica l’area di interesse.- <altitude> : indica la minima o specifica altitudine dell’area interessata dal messaggio.- <ceiling> : deve essere usato solo in combinazione con l’elemento <altitude> e indica l’altitudine massima dell’area interessata dal messaggio.Dopo un’attenta valutazione, si giunge alla conclusione che le informazioni che riguardanola localizzazione geografica dell’evento su un’eventuale mappa sono contenute all’internodegli elementi <polygon> e <circle>; se nel messaggio questi non sono presenti, allora lalocalizzazione dell’evento non è immediata, in quanto vengono fornite solamenteindicazioni testuali che individuano il luogo interessato indicando nomi di città o di paesivicini e quindi nessun tipo di coordinata. 10
  11. 11. Quindi riassumendo, le informazioni di interesse sono che l’elemento <polygon> contieneuna serie di coppie di coordinate che delineano i confini dell’area interessata, mentrel’elemento <circle> contiene sia le coordinate del luogo in cui è avvenuto l’evento diemergenza, sia la lunghezza di un eventuale raggio per formare una circonferenza, che inmolti casi risulta essere zero, e perciò non è presente.2.2 TSO – Tactical Situation ObjectIl TSO (Tactical Situation Object) è uno dei principali mezzi utilizzati per raggiungere illivello minimo di interoperabilità tra le varie agenzie di soccorso, in quanto definisce unastruttura di informazioni che consente la memorizzazione di una determinata situazione diemergenza.Esistono diversi metodi per aumentare e migliorare il livello di interoperabilità tra lediverse agenzie di soccorso che operano in modo congiunto in una situazione d’emergenza.La situazione ideale che si vuole raggiungere è quella di poter condividere lo stessomodello di dati e di aver accesso ad un grande e comune database virtuale, così ogni partedi informazione è immediatamente disponibile e condivisibile tra tutte le agenzie.La complessità della struttura del messaggio è stata intenzionalmente limitata per facilitarela compatibilità con il sistema e le infrastrutture esistenti; lo scopo della specifica è quellodi garantire che il significato di ogni singolo messaggio sia inequivocabile.L’utilizzo principale del TSO è lo scambio di informazioni complete ed esaurienti tra due opiù entità di tipo operativo; per questo tipo di scambio, il mittente del TSO deve ritenereche il collegamento, con i destinatari del messaggio, potrebbe venire interrotto, e perciòl’informazione contenuta nel TSO deve essere fin da subito la più completa possibile.La struttura di un messaggio TSO definisce la struttura del messaggio XML, il tipo di datidi ogni elemento, ed eventuali vincoli sui valori validi di ogni elemento; un numerosignificativo di elementi è definito da codici specifici che identificano i concetti da fornireall’utente finale.Le informazioni importanti, contenute all’interno del TSO, sono:o Le INFORMAZIONI DI IDENTIFICAZIONE descrivono l’origine dell’informazione e quando questa è stata creata.; sono informazioni obbligatorie all’interno del TSO.o La DESCRIZIONE DELL’EVENTO fornisce informazioni importanti riguardanti il tipo di evento, la sua estensione, il numero delle vittime, le sue conseguenze, etc. 11
  12. 12. o La DESCRIZIONE DELLE RISORSE fornisce le informazioni riguardanti le risorse umane, la loro eventuale disponibilità, la loro posizione e la loro capacità. Ogni singola agenzia coinvolta dispone di varie risorse ed è quindi necessario conoscere quali sono già state utilizzate o quali risorse sono disponibili.o La DESCRIZIONE DEI COMPITI permette di informare le varie agenzie coinvolte sulle attività che si stanno svolgendo o che si svolgeranno a breve per coordinare e gestire la situazione il meglio possibile.Il TSO consente lo scambio di informazioni tattiche tra diverse agenzie duranteun’emergenza; nonostante il gran numero di dati, che possono essere inclusi all’interno diun messaggio TSO, la struttura di base è semplice.È un dizionario di tipo gerarchico (vedi Appendice E); ogni singola applicazione è aconoscenza di una parte di questo dizionario, quella parte che è inerente all’uso di quelladeterminata applicazione.Un altro vantaggio nell’utilizzo del TSO è quello di avere la possibilità di utilizzare diverseversioni del dizionario gerarchico; un’applicazione che sta usando un dizionario vecchiodeve essere in grado di ricevere informazioni sulla base del dizionario più recente, cosìcome un’applicazione che usa un dizionario recente deve essere in grado di ricevereinformazioni sulla base del contenuto di un vecchio dizionario. Fig.6: Struttura del TSO 12
  13. 13. 2.3 JIXEL - Applicazione software per lo scambio datiLo schema generale, per la risposta ad una situazione di rischio, necessita della conoscenzadel fenomeno stesso, di un monitoraggio ambientale costante, di un allarme rapido deiservizi, di tempi brevi di intervento e dell’impiego ottimale delle risorse che si hanno adisposizione.L’elemento chiave risiede quindi nella velocità, nel coordinamento e nel trasferimentoefficiente e tempestivo delle informazioni necessarie per effettuare interventi mirati per lesituazioni di emergenza e per i vari servizi di soccorso al cittadino.Ogni singola informazione è un importante contributo per migliorare la comprensionedell’evento che si sta verificando, ed è visualizzata come un messaggio, basato sul formatodi interscambio dati CAP (Common Alerting Protocol).Il CAP viene utilizzato da molte applicazioni per permettere lo scambio di messaggi tra levarie sale operative dei servizi di emergenza; una di queste è il Jixel, che è una suite diapplicazioni di tipo software, basate sul web, che ha lo scopo di consentire ai servizi diemergenza di scambiarsi informazioni, sia durante le operazioni giornaliere di soccorso, sianella gestione straordinaria di eventi catastrofici e delle loro conseguenze.Il CAP è il formato dati XML standard che Jixel usa per gestire le varie informazioni e idati rilevanti che riguardano un determinato incidente.Gli aspetti più importanti e significativi del CAP sono l’interoperabilità con tutti i sistemidi emergenza, la completezza, in quanto il formato deve prevedere tutti gli elementi di unsistema di avviso pubblico, la struttura XML e il formato multiuso, che è in grado disupportare tutti i tipi di messaggi multipli e multilingua.Come il CAP, anche il TSO (Tactical Situation Object) è un protocollo basato sullastruttura dati XML, composta da differenti blocci di informazione, che offre un livellominimo di interoperabilità tra i servizi di emergenza.Lo stesso TSO definisce una serie di codici che identificano univocamente una determinatatipologia di emergenza; Jixel utilizza i codici definiti nel dizionario del TSO all’internodella struttura dati CAP permettendo, così, una completa comprensione dell’evento.La struttura del Jixel è quella definita dal CAP e il suo contenuto informativo è inseritoutilizzando i campi definiti dalla struttura CAP facendo anche uso dei termini definiti dalTSO.L’architettura del Jixel è composta da 3 importanti blocchi : CAP Generator, CAP Router eCAP Viewer. 13
  14. 14. Il CAP Generator permette di creare e condividere i dati sull’incidente attraverso l’utilizzodi un’interfaccia grafica intuitiva; si possono segnalare gli incidenti assegnando lecoordinate geografiche e tante altre informazioni, ad esempio la descrizione dell’incidente,le risorse, gli allegati, ecc. Fig.7: Schermata di Jixel Demo – Cap GeneratorIl CAP Router è il servizio web che viene utilizzato per la distribuzione dei messaggi alleorganizzazioni partner a cui sono destinati; si possono configurare i destinatari per ognispecifica tipologia di messaggio e per questo il CAP Router è in grado di creare unmeccanismo di scambio dati sicuro e criptato per ognuno di essi. Fig.8: Schermata di Jixel Demo – Cap Viewer 14
  15. 15. Infine, il CAP Viewer ha il compito di visualizzare, filtrare e raggruppare, su un’interfacciageografica, le informazioni contenute nei messaggi distribuiti dal CAP Router.Proprio quest’ultimo è stato la fonte di ispirazione per il presente progetto, in quantocontiene tutte le funzionalità di cui si vuole arricchire e migliorare il precedente prototipo.La caratteristica del software Jixel, che è il punto centrale di questo elaborato, è lapossibilità di visualizzare su una mappa gli incidenti di cui ci si occupa, utilizzandol’interfaccia tipica di Google Maps.In questo caso, la modalità di rappresentazione degli incidenti varia in base al livello dizoom che si sta utilizzando, in modo da lasciare all’utente in utilizzo la possibilità didecidere se avere una visione globale degli incidenti oppure una vista dettagliata dellecaratteristiche degli incidenti.Il presente lavoro si concentra unicamente sulla funzionalità di visualizzazione dell’eventoe lascia ad eventuali ritocchi futuri il compito di rendere accessibile all’utente anche lapossibilità di zoomare sulla mappa. 15
  16. 16. 3. PROGETTAZIONE3.1 DEFINIZIONE DEI REQUISITISulla base delle considerazioni fatte finora, l’applicazione dovrà essere in grado di gestireun messaggio conforme al protocollo CAP, cioè un file formato XML; successivamentedovrà estrarre le informazioni utili all’utente, quelle contenute in <polygon> e in <circle>,che verranno elaborate e, attraverso un collegamento internet, si potrà accedere alla mappache localizzerà l’evento di interesse.L’applicazione dovrà essere indipendente dalla piattaforma sulla quale verrà eseguita, perrimanere concorde alle caratteristiche di interoperabilità e portabilità proprie del CAP.Questo progetto ha il compito di elaborare l’applicazione base già esistente, in modo taleda permettere la visualizzazione in formato grafico delle informazioni contenute nelmessaggio di allerta, con lo scopo di far conoscere all’utente, il più rapidamente possibile,quale area è interessata dall’evento e se si potrebbe trovare coinvolto da esso.La tipologia di utenza per questa applicazione un generico utente in movimento, come adesempio un cittadino coinvolto nell’emergenza oppure un operatore di soccorso.Perciò l’utilizzo di tale applicazione avverrà unicamente su dispositivi mobili,caratterizzati da due importanti fattori: la dimensione ridotta dello schermo su cui sivisualizzeranno le informazioni e le contenute risorse di calcolo e di memorizzazione.Riassumendo, i requisiti base dell’applicazione sono:1. Gestione ed estrazione di informazioni specifiche da un documento XML2. Indipendenza dalla piattaforma di esecuzione3. Necessità di esecuzione su dispositivi mobili4. Collegamento ad internet e visualizzazione della mappa3.2 SCELTA DELLE TECNOLOGIEIl sistema di sviluppo scelto per l’applicazione è Java Micro Edition System DevelopmentKit3.0, in quanto Java è uno dei linguaggi informatici più utilizzati e non dipendedall’architettura su cui viene eseguito, purchè ci siano i requisiti e gli strumenti perinterpretare il codice Java. 16
  17. 17. La piattaforma Java ME è organizzata in virtual machine, con configurazioni, profili edAPI opzionali, che opportunamente combinati consentono di realizzare una vastissimagamma di prodotti e servizi applicativi.Per soddisfare il primo requisito, si è scelta una libreria Java che permettesse la gestione diun documento in formato XML, cioè la libreria kXML, la quale fornisce tutte lefunzionalità di cui abbiamo bisogno.kXML è una libreria di API che implementa un pull parser di codice XML; è moltoimportante perché permette di fare il parsing di documenti XML nei dispositivi cellulari, inaltre parole il testo viene accuratamente analizzato in maniera sintattica.Per quanto riguarda l’ultimo requisito, la piattaforma Java ME è stata progettata fin dalprincipio con un forte orientamento alla connettività, e HTTP (HyperText TransferProtocol) è l’unico protocollo garantito su qualsiasi implementazione MIDP.L’HTTP è stato il protocollo di trasporto universale per la creazione di sistemi distribuitied interoperabili: è un protocollo client/server testuale (poiché i codici di controllo delprotocollo sono espressi come stringhe di testo semplice), sincrono (poiché l’invio dellarisposta da parte del server è contestuale alla ricezione della richiesta e il trasferimentoavviene all’interno della medesima connessione) e stateless (poiché non vi è correlazionetra invocazioni successive), basato sulla sequenza request-response tra client e server.Considerando ora la visualizzazione della mappa, si è pensato di ricorrere all’utilizzo dellecosiddette Google Static Maps API, cioè una metodologia che consente di incorporareun’immagine di Google Maps su un’eventuale pagina web senza la necessità di ricorrere aJavaScript o al caricamento di pagine dinamiche.Questo servizio, offerto da Google Maps, crea una mappa sulla base dei parametri chevengono immessi nell’URL, che vengono poi inviati tramite una richiesta HTTP standard;viene restituita una mappa come un’immagine statica nel formato gif, png e jpeg.Per ogni richiesta, è possibile specificare la posizione della mappa, la dimensionedell’immagine, il livello di zoom, il tipo di mappa che si vuole visualizzare, e ilposizionamento di eventuali marcatori, e molto altro ancora.La forma base per un URL di Google Static Maps API è :http://maps.googleapis.com/maps/api/staticmap?parametersEsistono numerosi tipi di parametri che permettono di personalizzare le mappe, ma perquesto progetto ci siamo concentrati unicamente sui seguenti: 17
  18. 18. - center : definisce il centro della mappa, equidistante da tutti i bordi della mappa; questo parametro può assumere una determinata posizione sia come una coppia di valori separati da virgola, cioè latitudine,longitudine, ad esempio “40.714728, -73.998672”, oppure come un indirizzo di stringa, per esempio “City Hall, New York, NY”; in questo elaborato si è scelto di occuparci della localizzazione del centro della mappa con l’utilizzo delle coordinate descritte all’interno del messaggio di allerta.- zoom: definisce il livello dello zoom della mappa determinando il livello di ingrandimento della stessa; i valori per lo zoom vanno dallo 0, cioè il più basso livello di zoom che permette di visualizzare il mondo intero sulla mappa, al 21+, che permette di visualizzare singoli edifici.- size: è un parametro obbligatorio che definisce le dimensione dell’immagine; richiede una stringa della forma horizontal_value x vertical_value; in questo progetto, avendo a che fare con dei dispositivi mobili muniti di uno schermo di ridotte dimensioni, si è predisposta come dimensione standard la 250x270, e in questo modo l’immagine viene visualizzata interamente ed è delle stesse dimensioni dello schermo.- maptype: definisce il tipo di mappa da costruire; ci sono diversi valori possibili per questo parametro, tra cui roadmap (valore di default, specifica un’immagine standard così come viene normalmente visualizzata sul sito web di Google Maps), satellite (specifica un’immagine satellitare), hybrid (specifica un ibrido tra l’immagine satellitare e l’immagine di default, mostrando uno strato trasparente di strade principali e toponimi sull’immagine satellitare) e terrain (specifica una mappa in rilievo che mostra terreno e vegetazione); per questo progetto si è l’hybrid.- markers: definisce uno o più indicatori che vengono allegati all’immagine in posizioni specifiche, e può assumere valori diversi separati dal carattere pipe (|).- path: definisce un unico percorso di due o più punti collegati tra loro che va a sovrapporsi all’immagine nella località specificata; questo parametro richiede una stringa di definizioni per ogni punto separata dal carattere pipe (|); c’è la possibilità di non specificare i valori per i parametri di center e zoom se è presente questo parametro, avendo così un posizionamento implicito per la mappa.- sensor: è un parametro obbligatorio che specifica se si utilizza un sensore per determinare la posizione attuale dell’utente; i valori possibili sono true o false.Le Google Static Maps API sono in grado di identificare con precisione le posizioni diparticolari punti sulla mappa e di mettere a fuoco la mappa nella posizione corretta, usando 18
  19. 19. il parametro center, e/o di allegare un qualsiasi marcatore opzionale sulla mappa,utilizzando il parametro marker.Le Google Static Maps API utilizzano i numeri per i valori di latitudine e longitudineoppure stringhe o indirizzi per specificare queste posizioni, e questi valori identificano inmaniera geocodificata una posizione.Le latitudini e le longitudini sono definite con dei numeri all’interno di una stringa separatada virgole di testo che devono avere al massimo una precisione di sei cifre decimali, adesempio “40.714728,-73.998672” è un valore geocodificato valido; la precisione al dilà delle sei cifre decimali viene ignorata.Si utilizza come sistema di riferimento WGS84 (World Geodetic System 1984), ovvero unsistema di riferimento geodetico concepito per coprire tutto il globo terreste; è un sistemaglobale geocentrico, definito attraverso osservazioni spaziali e costituito da una ternacartesiana destrorsa con origine coincidente con il centro di massa della Terra, l’asse Zparallelo alla direzione del CTP (Polo Convenzionale Terrestre), l’asse X passante per ilmeridiano di Greenwich e l’asse Y diretto in modo tale da completare la terna ortogonaledestrorsa.A questo sistema è associato l’ellissoide WGS84, anch’esso definito attraversoosservazioni spaziali, con centro e assi coincidenti con quelli della terna cartesiana.I valori di latitudine e longitudine devono corrispondere ad un percorso valido sullasuperficie della terra: le latitudini possono assumere valori compresi tra -90 e +90, mentre ivalori della longitudine devono essere compresi tra -180 e +180.Se si specifica una latitudine o una longitudine non valida, la richiesta per quellaparticolare mappa verrà respinta.3.3 STRUTTURA DELL’APPLICAZIONELa struttura di base, da cui si è partiti per effettuare le opportune modifiche per visualizzarela mappa dell’evento, è suddivisa in due parti principali: la prima è destinata unicamentealla gestione della parte grafica, mentre la seconda alla gestione del codice XML di cui ècomposto il messaggio.Le modifiche apportate al progetto iniziale sono dei ritocchi nella parte grafica el’inserimento di due nuove importanti parti: una si concentra sulla gestione dellaconnessione internet e del caricamento dell’immagine associata a un determinato URL, 19
  20. 20. mentre la seconda è l’analisi del documento XML e l’estrazione di informazioni per lacreazione della mappa.L’applicazione deve visualizzare il testo del messaggio CAP e deve informare l’utentesulla zona interessata dall’evento utilizzando la mappa.Ci siamo concentrati, in modo specifico, su eventi catastrofici, quali terremoti, valanghe efrane; per ognuno di questi eventi, si è ricercata una situazione di emergenza realmenteaccaduta, e sulla base delle informazioni rinvenute, si è creato un ipotetico messaggio CAPche avrebbe potuto essere inviato in quella particolare situazione di emergenza.Come evento sismico si è scelto il terremoto avvertito in Emilia il 25 gennaio 2012.Dopo le scosse di terremoto che hanno provocato paura nel Veronese, un’altra scossamolto forte è stata registrata alle 9:06 in provincia di Reggio Emilia, e questa scossa è statadi magnitudo 4.9 della scala Richter.La struttura XML del messaggio CAP di questo evento potrebbe essere la seguente: Fig.9: Esempio di struttura XML di un messaggio di allerta per un terremotoCome evento franoso si è scelta la frana di San Fratello, in provincia di Messina; nelpomeriggio del 13 febbraio 2010, nel comune di San Fratello, si è innescata una frana, etale fenomeno, con un movimento di tipo retrogressivo, è progredito verso montecoinvolgendo la porzione orientale del centro abitato.Il messaggio CAP, associato a tale avvenimento catastrofico, potrebbe essere il seguente: 20
  21. 21. Fig.10: Esempio di struttura XML di un messaggio di allerta per una franaCome evento valanghivo, ci si è concentrati sulla valanga della Marmolada del 7 aprile2011; una valanga si è staccata dalla Marmolada finendo su una delle piste da scisottostanti, sopra il rifugio Fedaia, non distante dalla partenza degli impianti.Il messaggio CAP associato a questa situazione di emergenza potrebbe essere il seguente: Fig.11: Esempio di struttura XML di un messaggio di allerta per una valanga 21
  22. 22. Come si può notare da questi tre esempi di messaggi CAP, il codice XML, da cui sonocomposti, è articolato a livelli; il livello sul quale dobbiamo concentrarci è quello relativoal segmento <area>; le informazioni di cui dobbiamo disporre per la creazione di unamappa sono <circle> o <polygon>.L’applicazione dovrà quindi essere in grado di accedere al codice XML, e scorrerlocompletamente per cercare le informazioni contenute nell’elemento <circle> o <polygon>,che verranno poi estratte e modificate adeguatamente per poter essere utilizzate per crearel’URL che definirà la mappa del luogo in questione.La struttura dell’applicazione sarà quindi articolata in quattro classi, come si può vederenel relativo diagramma: MsgParser Attributes private parser private doc private root CapViewer Attributes Operations private filename Pprotected MsgParser (filename) protected display protected [0..*]parseElement (el_name,level) protected select1 protected select2 protected select3 protected frm AnalisiXML protected frm2 protected frmMap Attributes protected si private parser protected si2 private doc protected exitCmd private root protected backCmd public circle protected imageCmd public polygon private imageItem public valnull private aImage public v_str public v_str2 Operations public CapViewer( ) public startApp( ) Operations public pauseApp ( ) public String read(filename) public destroyApp (unconditional) public commandAction (c,d) LloadImage Operations public image loadImage (URL) Fig.12: Diagramma delle classi 22
  23. 23. La classe CapViewer ha il compito di gestire l’interfaccia grafica dell’applicazione, per lavisualizzazione delle informazioni contenute nel messaggio CAP; tra gli attributi, notiamoprotected imageCmd, che è l’identificativo del tasto del menu per accedere alla mappa.private imageItem e private aImage sono due attributi necessari per la creazione e lavisualizzazione della mappa corrispondente al messaggio di allerta.Tra i vari metodi (operations), all’interno di questa classe, è molto importanteCapViewer(),il costruttore, che si occupa della gestione complessiva dell’applicazione,in quanto al suo interno si inizializzano le variabili per la gestione dell’interfaccia grafica.startApp() si occupa dell’avvio dell’applicazione e delle operazioni che avvengono nelcorso del funzionamento; in questo metodo, è presente un’importante sequenza di linee dicodice che crea l’URL della mappa, a partire dalle informazioni lette dal messaggio XML,e carica l’immagine associata a quel determinato URL attraverso un collegamento internet.commandAction() gestisce le interazioni che avvengono tra utente ed applicazione, inaltre parole, la gestione del menu delle possibili azioni che può svolgere l’utente; nel casoin cui l’utente decida di voler visualizzare la mappa dell’evento, può cliccare sul tastorelativo al comando ImageMAP presente nella schermata principale del messaggio.I restanti due metodi di questa classe sono: pauseApp(), gestisce un eventuale stato dipausa dell’applicazione, e destroyApp(), si occupa delle operazioni necessarie perportare a termine l’applicazione.La classe MsgParser ha il compito di analizzare e leggere l’intero codice XML checompone il messaggio d’allerta, utilizzando due metodi (operations): MsgParser() sioccupa dell’accesso al file contenente il codice XML e parseElement() gestiscel’estrazione e la gestione delle informazioni richieste dall’utente.La classe AnalisiXML fornisce le informazioni necessarie alla creazione della mappa; tra ivari attributi, notiamo v_str e v_str2, due vettori, che permetteranno di estrarre emanipolare specifiche informazioni di testo.circle e polygon saranno i valori che il metodo read() restituirà a seconda delleinformazioni presenti nel messaggio CAP; conterranno i valori per le coordinate del puntocentrale o dei punti di un percorso, già modificati, per poter essere inseriti come parametriall’interno dell’indirizzo URL che permetterà di visualizzare la mappa del luogointeressato. 23
  24. 24. La classe loadImage è composta da un unico metodo (operations) loadImage(), che hail compito di aprire una connessione http per poter accedere ad internet, in modo tale dascaricare da un determinato URL l’immagine associata alla mappa dell’evento.L’interazione tra queste classi avverrà nel seguente modo: quando sarà necessario, la classeprincipale CapViewer invocherà uno dei metodi della classe MsgParser a secondadell’operazione che dovrà essere effettuata, ovvero, a seconda del tasto che l’utentepremerà, verranno richiamati dei metodi della classe MsgParser con valori inerentiall’azione da compiere.La classe CapViewer invocherà sempre il metodo read() della classe AnalisiXML, peressere al corrente, fin da subito, di quali informazioni si dispone ad ogni messaggio diallerta; all’avvio dell’applicazione si creerà la connessione internet e si scaricherà giàl’immagine della mappa associata all’evento, oppure un’immagine vuota, se leinformazioni di <circle> o <polygon> non sono presenti.Solamente se l’utente ricercherà, tra i comandi del menù, la funzionalità per lavisualizzazione di un’eventuale mappa associata al messaggio, l’immagine verrà inseritanella schermata corrente e sarà finalmente visibile sullo schermo; altrimenti resterà caricatanel sistema e non verrà agganciata a nessun Form finchè questo non sarà richiestodall’utente che sta usando l’applicazione. 24
  25. 25. 4. REALIZZAZIONE4.1 INTERFACCIA GRAFICAAll’avvio dell’applicazione, l’interfaccia grafica si presenta come di seguito: Fig.13: Visualizzazione schermata principale dell’applicazioneCome si può osservare da questa immagine, è presente sullo schermo una lista di contenutiche fanno parte del segmento principale <alert> del codice XML di un generico messaggioCAP, che si può scorrere utilizzando i tasti direzionali del dispositivo e, per ogni elementovisualizzato, sono disponibili i corrispondenti sottoelementi.Per visualizzare questo contenuto, è necessario evidenziare l’elemento di interesse e usareil tasto di selezione del dispositivo.A seconda del tipo di contenuto dell’elemento selezionato, verrà visualizzata unaschermata diversa: nel caso di elementi composti unicamente da informazioni testuali, siaprirà una schermata che conterrà il nome dell’elemento appena selezionato assieme al suovalore; nel caso, invece, di elementi composti da liste che contengono ulteriori elementitestuali, verrà presentata una lista interattiva, in cui l’utente dovrà evidenziare l’elementodesiderato ed accedervi selezionandolo con il tasto del dispositivo. 25
  26. 26. In altre parole, la visualizzazione degli elementi testuali che compongono il messaggioCAP, che giunge al dispositivo mobile, potrebbe essere la seguente: Fig.14: Visualizzazione di un elemento testuale e visualizzazione di un elemento complessoNella schermata principale, quando si avvia l’applicazione, si nota la presenza di dueimportanti tasti: il tasto “Exit”, che ha il compito di permettere la chiusuradell’applicazione se esso viene selezionato, e il tasto “ImageMAP” che è il frutto di questoprogetto.Selezionando questo tasto, si accede direttamente alla visualizzazione della mappaassociata al messaggio d’allerta corrente.A seconda del tipo di evento di emergenza, considerato volta per volta, si riscontranoalcuni importanti aspetti nella visualizzazione delle relative mappe.Nel momento in cui giunge, sul dispositivo mobile, un messaggio di emergenza, l’utente hala possibilità, con la pressione di un unico tasto, di rendersi conto della gravità del dannocausato dall’evento localizzando il luogo o la zona colpita.Se consideriamo gli eventi di emergenza prima discussi, cioè il terremoto dell’Emilia, lavalanga sulla Marmolada e la frana di San Fratello, notiamo alcune caratteristicheinteressanti, che permettono di comprendere meglio l’importanza e il notevole contributo 26
  27. 27. che offre l’utilizzo di un oggetto, quale la mappa, per affrontare nel modo migliore unevento d’emergenza.Prendiamo ora in esame la situazione di emergenza causata dal terremoto che ha colpitol’Emilia nel gennaio di quest’anno, e, sulla base del messaggio XML che prima abbiamoproposto come esempio per questo evento, viene creata una mappa che verrà visualizzatacome segue: Fig.15: Visualizzazione della mappa inerente un messaggio d’allerta terremotoCome prima cosa, si nota che, al centro della mappa, è presente un marcatore, di coloreblu, che individua la zona interessata dall’evento d’emergenza; la presenza di questoelemento aggiuntivo sulla mappa, è stato possibile in quanto, dal codice XML delmessaggio CAP considerato, sono state estratte le informazioni contenute nell’elemento<circle> del segmento <area>, in cui sono presenti le coordinate del punto interessatodall’evento.In questo caso, si utilizzano queste coordinate sia per individuare il luogo dell’evento sullamappa, e quindi centrare la mappa sullo schermo, sia per posizionare il marcatore a quellecoordinate; in altre parole, questi dati individuano lo stesso punto.Per rendere la lettura della mappa più semplice ad un eventuale utente, viene inseritoquesto marcatore che mette in evidenza il punto interessato, indirizzando l’attenzioneunicamente su questo. 27
  28. 28. Grazie alle coordinate esatte del luogo colpito, è possibile individuare sulla mappa il luogopreciso a cui fa riferimento il messaggio d’allerta.Inoltre, è importante osservare come, attraverso l’utilizzo di una mappa di tipo hybrid,sia più facile localizzare il luogo selezionato, in quanto sono presenti i nomi delle localitàvicine alla zona di interesse.Esaminando ora l’evento valanghivo che ha interessato il comprensorio montano dellaMarmolada nell’aprile dell’anno scorso, e le considerazioni fatte sull’esempio di codiceXML associato ad un eventuale messaggio CAP per questo evento, la mappa basata sulleinformazioni contenute in questo codice verrà visualizzata come segue: Fig.16: Visualizzazione della mappa inerente un messaggio d’allerta valangaIn questo caso, sulla mappa viene evidenziato il percorso che la valanga ha seguito durantela sua discesa, dal suo distaccamento dalle pareti rocciose fino alla sua fermata alle pendicidel monte; questa informazione è presente sulla mappa, in quanto, i dati che sono statiestratti dal codice XML del messaggio d’allerta, erano contenuti all’interno dell’elemento<polygon> del segmento <area>.L’individuazione del tragitto seguito dalla valanga è molto importante per le squadre direcupero, nel caso in cui ci siano delle persone disperse, in quanto, proprio lungo quelpercorso, si concentreranno le ricerce e le attività di soccorso. 28
  29. 29. Infine esaminiamo la mappa, associata al codice XML relativo all’evento franoso che hacolpito il paese di San Fratello in provincia di Messina nel febbraio del 2010; sulla basedelle informazioni contenute nel messaggio CAP, la mappa relativa a questo evento saràvisualizzata come segue: Fig.17: Visualizzazione della mappa inerente un messaggio d’allerta franaLe informazioni contenute nella mappa riguardano la delimitazione della zona interessatadalla frana, e sono molto importanti per determinare la gravità della situazione sulla basedelle dimensioni dell’area colpita.Anche in questo caso, grazie all’utilizzo di una mappa di tipo hybrid, è più facilelocalizzare il luogo colpito dall’evento.Infine, nel caso in cui il messaggio CAP non contenga informazioni sullageoreferenziazione del luogo in cui l’evento è localizzato, cioè non ci sono dati per glielementi di <circle> e <polygon>, l’immagine che viene caricata sarà la seguente: 29
  30. 30. Fig.18: Visualizzazione dell’immagine vuotaIn tutti questi esempi, sulle schermate in cui vengono caricate le immagini delle mappe, sinota la presenza del tasto “Back”; alla pressione di questo, l’utente si ritrova nellaschermata principale da cui siamo partiti, e da lì può accedere alle informazioni di testo delmessaggio, oppure nuovamente alla visualizzazione della mappa.4.2 IMPLEMENTAZIONEOra ci si occupa dell’analisi del funzionamento interno dell’applicazione, commentando lescelte apportate per le varie classi progettate o modificate di cui prima abbiamo discusso.Dopo una presentazione delle operazioni svolte dall’applicazione al suo avvio, cheriguardano appunto tutte le classi, si entrerà nel dettaglio dei moduli che compongonociascuna delle classi interessate nelle operazioni per ottenere e visualizzare la mappa delluogo coinvolto nell’evento di emergenza. 30
  31. 31. 4.2.1 Funzionamento generaleUna volta avviata l’applicazione, si definisce il nome del file XML che dovrà essereutilizzato nel funzionamento dell’intera sessione di lavoro, sul dispositivo mobile; vieneeseguita la classe AnalisiXML passandole questo come parametro principale.La classe AnalisiXML estrarrà le informazioni, riguardanti la georeferenziazione,contenute nel messaggio, e fornirà alla classe CapViewer principale questi valori giàmodificati per il loro futuro utilizzo all’interno di un indirizzo URL.A questo punto il costruttore della classe Capviewer inizializzerà le componenti necessariea creare l’interfaccia grafica del’applicazione.Si passa ora alle operazioni che avvengono durante il funzionamento dell’applicazione:sulla base dei valori di georeferenziazione prima ricavati dal codice XML, si crea l’URLappropriato che rappresenterà il collegamento internet con l’immagine della mappa che èassociata all’evento descritto nel messaggio dall’allerta preso in esame.Si fornisce poi, alla classe MsgParser, le indicazioni necessarie per individuare il filecontenente il messaggio di cui si vuole analizzare il contenuto testuale, ovvero si fornisce ilnome del file che è stato fissato all’inizio; ora la classe MsgParser potrà accedere al filerendendolo accessibile alla classe CapViewer mediante i suoi metodi.Avendo ora accesso al file, CapViewer potrà creare una lista di elementi del primo livello,cioè quelli contenuti nel segmento <alert> del codice XML, e renderla visibile sullaschermata principale dell’interfaccia grafica.Viene eseguita ora la classe loadImage, fornendole come parametro l’URL, prodottoprima; questa classe creerà il collegamento internet necessario per accedere, attraversol’indirizzo URL, all’immagine della mappa ad esso associato; quest’immagine verràcaricata ma non sarà ancora visualizzata sul dispositivo.Ora tutto è pronto e l’applicazione sarà nelle mani dell’utente: a seconda del comandoscelto dall’utente, sullo schermo del dispositivo verranno visualizzati elementi diversi:l’applicazione reagirà solamente ai comandi dell’utente, che potrà scegliere di terminarel’applicazione attraverso la pressione del tasto “Exit”, oppure potrà visualizzare ilcontenuto di uno degli elementi della lista visualizzata sullo schermo, oppure potràaccedere, attraverso la pressione del tasto “ImageMAP” alla mappa del luogo dell’eventodescritto nel messaggio d’allerta.Se sceglierà di accedere alla mappa dell’evento, l’applicazione allegherà l’immaginecaricata precedentemente da internet attraverso il collegamento Http, ad una nuova 31
  32. 32. schermata in cui, oltre alla mappa, comparirà anche il tasto “Back” che permetteràall’utente di ritornare alla schermata principale quando questo verrà selezionato.4.2.2 La classe CapViewerTutti i numeri di linea di codice, contenuti in questo paragrafo, fanno riferimentoall’Appendice A, visualizzata nelle pagine successive.Nelle prime linee di codice, [3,8], sono contenute le dichiarazioni delle librerie daimportare: la libreria javax.microedition.lcdui fornisce una serie di funzionalitàapplicabili all’interfaccia utente per le applicazioni MIDP (Mobile Information DeviceProfile – è un’applicazione Java che fornisce le funzioni richieste dai dispositivi mobili, tracui l’interfaccia utente, la connettività di rete, memorizzazione locale dei dati el’applicazione per la gestione del ciclo di vita), il cui utilizzo principale è rivolto adispositivi di informazione mobili.La libreria javax.microedition.midlet definisce le applicazioni per il profilo di undispositivo mobile e le interazioni tra l’applicazione e l’ambiente in cui viene eseguita.Le seguenti due librerie, la libreria javax.microedition.io.Connector e la libreriajavax.microedition.io.HttpConnection, definiscono i metodi e le costanti per lacreazione e l’utilizzo di una generica connessione Http.La libreria java.io.DataInputStream permette all’applicazione di utilizzare un flussodi dati in uscita per scrivere i dati che possono essere poi letti da un flusso di dati in input.L’ultima libreria importata è la java.io.IOException, che gestisce le eccezioniprodotte da operazioni di Input/Output che falliscono o che si interrompono.Le linee [16,29] contengono le dichiarazioni delle variabili che verranno utilizzate inseguito; ci si sofferma ora su quelle utilizzate per ottenere la visualizzazione della mappadell’evento: la variabile di tipo Form frmMap viene dichiarata alla linea [20]: un form nonè altro che una schermata che può contenere diversi tipi di oggetti, come immagini, campidi testo, campi dati, etc; in questo caso, questa sarà la schermata a cui si allegheràl’immagine della mappa caricata da internet con specifiche dimensioni.Alla linea [24] si dichiara la variabile Command imageCmd che è un costrutto cheincapsula le informazioni di tipo semantico di un’azione che può essere compiutaall’interno dell’applicazione; il comportamento che il comando attiva non è contenuto in 32
  33. 33. questo oggetto, ciò significa che il comando contiene solamente le informazioni sul‘comando’ e non l’azione reale che si verifica quando questo è attivato.In questo progetto imageCmd sarà il comando utilizzato per accedere alla mappa delmessaggio.La linea [26] contiene l’inizializzazione della variabile filename, che è una variabile ditipo stringa, che contiene appunto una stringa di caratteri che è l’indirizzo della risorsa acui accede l’applicazione; modificando questo indirizzo, si può accedere a tutti i file conestensione .xml contenuti nella cartella src/files all’interno del progetto.Le linee [28,29] sono molto importanti, in quanto contengono le dichiarazioni di duevariabili che verranno utilizzate per la visualizzazione delle immagini sul dispositivo:ImageItem imageItem è un elemento che può contenere un’immagine e ogni oggettoImageItem contiene un riferimento ad un oggetto immagine; Image aImage contienesolamente i dati che appartengono ad un’immagine grafica, ed esiste indipendentementedal dispositivo di visualizzazione che si utilizza.Le linee [31,34] del codice richiamano il metodo read() della classe AnalisiXML, chelegge e cerca, all’interno del codice XML del file, le informazioni contenute negli elementidi <circle> o di <polygon>; i valori che vengono trovati sono quindi inseriti nelle variabilidi tipo stringa pol e cir.All’interno del costruttore della classe, cioè linee [37,51], vengono inizializzate le variabilinecessarie per la gestione dell’interfaccia grafica: quelle, utilizzate per il nostro progetto,sono alla linea [40] imageCmd, a cui si associa il chiamato ‘ImageMAP’ e diviene unpulsante, e alla linea [44] frmMap, che viene inizializzato come una schermata dal titolo‘CAP MAP’.Successivamente si incontra il metodo startApp() che si concentra sulle operazioni diavvio e sul funzionamento dell’applicazione: nelle prime linee di questo metodo, [54,59],si crea l’indirizzo URL a cui si dovrà accedere, tramite un collegamento http, per caricare idati dell’immagine della mappa appropriata.La creazione della stringa URL si basa sui dati raccolti dall’esecuzione della classeAnalisiXML: in un generico messaggio CAP, le informazioni di georeferenziazionedell’evento sono contenute o nell’elemento <circle> o nell’elemento <polygon> e mai inentrambi contemporaneamente, anche perché sarebbe alquanto insensato.Sulla base di queste considerazioni, descriviamo ora questo importante passaggio: se lastringa cir, che rappresenta le informazioni contenute nell’elemento <circle> del 33
  34. 34. messaggio, risulta essere vuota, e al tempo stesso la stringa pol, che rappresenta leinformazioni contenute nell’elemento <polygon>, è piena, allora si creerà un indirizzoURL che permetterà la visualizzazione di una mappa con una serie di marcatori uniti traloro, in modo tale da definire una linea o un poligono che verrà sovvrapposto all’area dellamappa desiderata.Viceversa, se la stringa pol sarà vuota e, nello stesso tempo, la stringa cir sarà piena,allora si creerà un indirizzo URL che permetterà la visualizzazione di una mappa con ununico marcatore che definirà il punto esatto descritto da <circle>.Nel caso in cui il messaggio CAP non contenga informazioni per la georeferenziazione delluogo dell’evento d’emergenza, cioè né <circle> né <polygon> sono presenti, l’URL saràquello di un’immagine contenente il testo “Image Not Found”, che informerà così l’utente,che sta utilizzando l’applicazione, che la mappa relativa al messaggio corrente non èdisponibile.Alla linea [66] si assegna il comando imageCmd alla schermata iniziale dell’applicazioneche contiene già una lista di elementi e un comando ‘Exit’ per uscire dall’applicazionestessa; in questo modo, all’avvio, verrà visualizzata una schermata in cui, assieme agli altricomandi e oggetti, sarà presente anche un comando chiamato ‘ImageCAP’ che, seselezionato, permetterà di accedere direttamente all’immagine della mappa.Le linee [76,79] si concentrano sulla creazione dell’immagine della mappa; viene utilizzatoun costrutto try-catch per poter gestire eventuali eccezioni.Questo costrutto è molto utile per la gestione degli errori e delle eccezioni in Java; il codicein cui si desiderano intercettare gli errori è contenuto all’interno del blocco try, e quando siverifica un’eccezione, questa viene generata fuori dal blocco try e intercettatadall’istruzione catch che la elabora.Il controllo a questo punto passa a catch e il blocco try termina; in pratica, catch non vienechiamato, ma è l’esecuzione del programma ad essere trasferita all’istruzione, e dopol’esecuzione dell’istruzione catch, il controllo del programma prosegue con le istruzionisuccessive a questa.Si richiama la classe loadImage che permette di creare un collegamento http e, passandocome parametro l’URL precedentemente prodotto, si assegna alla variabile aImagel’immagine caricata da internet; a questo punto, linea [78], si inizializza imageItemassegnando a questo oggetto l’immagine appena ottenuta. 34
  35. 35. Le seguenti tre linee, [81,83], hanno il compito di completare il Form frmMap inserendo alsuo interno imageItem, cioè l’immagine caricata da internet, e un comando ‘Back’ perpoter tornare alla schermata precedente.La linea [83] attiva il controllo dei comandi al Form frmMap, ovvero ora i comandiassegnati al suo interno potranno essere utilizzati e saranno funzionanti.Alla linea [86] si incontra il metodo pauseApp(), che si occupa della gestione dellasospensione delle funzionalità MIDlet; successivamente, è presente il metododestroyApp(boolean unconditional) che gestisce la chiusura dell’applicazione,che può variare in base al parametro boolean passato come argomento, ovvero true se sivuole che tutte le risorse vengano rilasciate e liberate all’uscita, o false se si vuole chetale fase non avvenga immediatamente.Alla linea [94] all’interno del metodo CommandAction() si determina le possibili azioniassociate ai comandi prensenti all’interno dell’applicazione; se l’utente seleziona il tasto‘imageCmd’, prima creato, allora verrà visualizzata la schermata che conterrà il FormfrmMap.Si definiscono anche i tasti ‘Exit’, ‘Back’, e quelli inerenti alla selezione degli elementidelle liste che vengono visualizzate sullo schermo: se viene selezionato il tasto ‘Exit’ vieneterminata l’applicazione utilizzando le due importanti istruzioni destroyApp(false) enotifyDestroyed().Nelle ultime righe del codice, alla linea [143], si determina il controllo degli eventi allaselezione del tasto ‘Back’, in particolare nel caso in cui venga premuto quello contenutonel Form frmMap; in questa situazione, si visualizzerà la schermata principale.4.2.3 La classe MsgParserQuesta classe viene utilizzata dall’applicazione, ma non è stata oggetto di modifiche perquesto progetto, in quanto ha come scopo l’analisi e la lettura del documento XML perintero, a seconda delle richieste dell’utente; in altre parole, la visualizzazione della mappa,che è l’obiettivo di questo lavoro, non influisce e non viene influenzata da questa parte dicodice.Perciò, il codice rimane esattamente com’è ed il suo funzionamento rimane immutato, epuò comunque essere osservato nell’Appendice B nelle pagine successive. 35
  36. 36. 4.2.4 La classe AnalisiXMLTutti i numeri di linea di codice, contenuti in questo paragrafo, fanno riferimentoall’Appendice C, visualizzata nelle pagine successive; questa classe ha il compito dianalizzare il contenuto del documento XML e di estrarre le informazioni necessarie allacreazione dell’indirizzo URL associato ad una determinata mappa, che verrà poivisualizzata sul dispositivo.Nelle prime linee del codice, [5,10], sono contenute le dichiarazioni delle librerie daimportare: la prima libreria, linea [5], è stata già discussa nel paragrafo precedente, inquello inerente alla classe CapViewer.Alla linea [6], la libreria java.io.InputStream è una classe astratta ed è la superclassedi tutte le classi che rappresentano un flusso di byte in input.La libreria java.io.InputStreamReader, linea [7], è una classe che legge i byte e litrasforma in caratteri utilizzando uno specifico charset (codifica di caratteri – codice cheassocia un insieme di caratteri ad un insieme di altri byte).La libreria successiva, java.util.Vector, permette di utilizzare dei vettori per lavorarecon array di stringhe di caratteri, ed è possibile modificare la lunghezza del vettore anchedurante l’esecuzione dell’applicazione; in questo progetto si utilizzano i vettori per estrarrele informazioni testuali dal codice XML e per poi modificarli per gli usi successivi.Le ultime due librerie, alle linee [9,10], si concentrano sull’utilizzo dei documenti informato XML.Si passa ora al codice che è il corpo della classe AnalisiXML: come prima cosa, sonopresenti le dichiarazioni delle variabili che verranno utilizzate; quelle per l’accesso al fileXML sono alle linee [42,44] e quelle per la trasmissione delle informazioni da una classeall’altra sono alle linee [48,50].Successivamente, linee [62,73], si passa al metodo interno che si occupa dell’analisi delfile che contiene il codice XML: per accedere a questo file, il cui nome viene passato comeparametro per questo metodo, viene utilizzato un costrutto try-catch, nel quale si tenta diaprire un canale di comunicazione verso il file stesso, che contiene il messaggio, e, nelcaso non dovesse andare a buon fine questa operazione e si creasse un’eccezione diinput/output, viene specificata la gestione di tale eccezione. 36
  37. 37. A questo punto si assegna alla variabile root l’elemento radice del codice XML, e grazie aquesto elemento, si può avviare la ricerca delle informazioni che ci interessano all’internodel messaggio.Nelle linee [96,114] vengono utilizzati due costrutti try-catch per gestire l’analisi delleinformazioni necessarie alla visualizzazione dell’immagine della mappa.Le linee di codice [97,98] rappresentano l’istruzione che determina il testo dell’elemento<polygon> contenuto nell’elemento <area> dell’elemento <info> appartenente alla rootprima inizializzata; se nel file non è presente l’elemento <polygon>, questa istruzione creaun’eccezione che viene gestita dal blocco di codice catch sucessivo.Se, invece, nel file è presente l’elemento <polygon>, si estrae il testo che esso contiene:questo testo viene modificato per poi essere inviato alle fasi successive per creare la stringadi testo per l’indirizzo URL della mappa: nel testo estratto dal codice XML vengonosostituite le virgole ‘,’ con barre ‘|’ e gli spazi ‘ ’ con le virgole ‘,’: in altre parole si passada un testo ‘46.44906 11.8767, 46.45081 11.8801,46.45105 11.8836’ , cherappresenta le coordinate dei vari punti descritte nel file, ad un testo‘46.44906,11.8767|46.45081,11.8801|46.45105,11.8836’ che rappresenta lecoordinate dei punti che vengono passate ed inserite come parametri nell’indirizzo URL.All’interno del blocco catch, è inserito un altro costrutto try-catch che gestisce l’estrazionedelle informazioni di <circle>; l’istruzione alle linee [106,107] individua il testo contenuonell’elemento <circle> contenuto nell’elemento <area> dell’elemento <info> appartenentealla root prima inizializzata; se nel file viene individuata la presenza dell’elemento<circle>, si estrae il testo contenuto in esso, e questo testo viene modificato per essere poiinviato alle fasi successive per creare l’indirizzo URL della mappa.Se l’elemento <circle> non è presente nel file, questa istruzione crea un’eccezione cheviene gestita attraverso la restituzione di un valore nullo alle linee [113,114].La forma generica di un elemento <circle> è la seguente: le coordinate di latitudine elongitudine del punto considerato, separate da una virgola, seguite da uno spazio e il raggiodi un’eventuale circonferenza, calcolata in chilometri.Le informazioni, che ci interessano in questo caso, sono solamente del coordinate delpunto e perciò, dopo aver individuato il carattere dello spazio nella stringa di testo, siestrae unicamente la prima parte del testo fino allo spazio che appunto separa leinformazioni di coordinate e raggio; si ricava così una sottostringa che contieneunicamente le coordinate di un punto. 37
  38. 38. 4.2.5 La classe loadImageTutti i numeri di linea di codice, contenuti in questo paragrafo, fanno riferimentoall’Appendice D, riportata nelle pagine successive; questa classe ha il compito di gestire laconnessione Http che permette, attraverso l’utilizzo dell’indirizzo URL passato comeparametro, di accedere all’immagine della mappa dell’evento di emergenza considerato.Nelle prime linee del codice, linee [3,6], sono contenute le dichiarazioni delle librerie chevengono importate dalla classe per il suo funzionamento: java.io contiene le classi pereffettuare operazioni di Input/Output.La libreria successiva, javax.microedition.lcdui, è stata già discussa in precedenzanel paragrafo inerente alla classe CapViewer.Le ultime due librerie sono addette alla gestione della connessione internet: la libreriajavax.microedition.io.Connector è utilizzata per creare il tipo più semplice diconnessione; la libreria javax.microedition.io.HttpConnection, invece, definiscei metodi e le costanti necessarie per gestire una connessione Http.L’elemento fondamentale è proprio la classe ‘Connector’, che viene usata per creare unqualsiasi tipo di connessione, come ad esempio verso file, protocollo Http, etc usandoun’istruzione che ha la seguente sintassi:‘Connector.open(protocol:address:parameters);’ .L’interfaccia HttpConnection dispone della principale modalità di comunicazione cheun’applicazione J2ME possa avere con l’esterno; ciascun dispositivo J2ME è in grado diconnettersi a server esterni attraverso l’utilizzo del protocollo HTTP 1.1.Alle linee [29,31] sono presenti le dichiarazioni delle variabili che verranno utilizzate diseguito nel metodo: alla linea [29] incontriamo HttpConnection che è laspecializzazione dell’interfaccia Connection dedicata alla gestione della connessione Http,creata a partire dallo schema ‘http://’.Come avviene per altri linguaggi di programmazione, la connessione gestita attraversoHttpConnection è una piccola tecnologia a stati, ovvero, appena creata, la connessione èin grado di riconoscere i parametri operativi che vengono impostati; l’apertura di unostream di input o la lettura di un attributo della risposta provoca la transizione nello stato‘Connected’, in cui non è più possibile modificare i parametri.Quando, poi, tutti i dati sono stati letti, la connessione giunge allo stato ‘Closed’, nel qualenon è consentito effettuare ulteriori operazioni né di lettura né di scrittura. 38
  39. 39. Alla linea [30] si definisce un elemento di tipo DataInputStream, che permetteall’applicazione di leggere i dati primitivi di Java da un flusso di byte in ingresso; alla lineasuccessiva è definita una variabile di tipo intero che rappresenterà il valore delladimensione in byte dei dati che rappresentano l’immagine caricata attraverso ilcollegamento Http.Le linee di codice successive sono definite attraverso il costrutto try-finally che gestisce laconnessione Http: alla linea [35] si determina la connessione, attraverso l’utilizzodell’istruzione, prima discussa, ‘Connector.open(url)’; si passa poi alla linea [36],che attraverso l’utilizzo del metodo getLength() dell’HttpConnection, si ottiene ladimensione del dato inviato al dispositivo dal server e, nel caso in cui la dimensione nonsia nota, il valore restituito sarà -1, e quindi verrà creata un’eccezione che sarà gestita dalblocco finally.Alla linea [41] si inizializza la variabile di DataInputStream, e la lettura dei datiavviene attraverso l’uso degli stream di input della connessione, che sono restituiti dalmetodo openInputStream().Molto importante è la linea successiva, in cui si utilizza il metodo readFully(), chericeve come argomento un array di byte, per leggere l’insieme completo dei dati: questometodo ha un comportamento particolare, in altre parole non ritorna finchè il bufferpassato come argomento non è stato completamente riempito, finchè non è stata raggiuntala fine dello stream e quindi non sono disponibili altri dati.A questo punto, alla linea [44], il metodo restituisce l’immagine associata all’URL passatocome parametro, utilizzando l’istruzione createImage() che crea appunto un’immagineimmutabile decodificata a seconda dei dati memorizzati nella matrice di byte che specifical’offset e la dimensione dell’immagine:‘createImage(byte[] imageData, int imageOffset, int imageLength)’.Nelle linee [47,50] c’è il contenuto del blocco finally, che è il codice che verrà sempreeseguito, indipendentemente dal fatto che si siano verificate eccezioni o meno; in questocaso verrà chiusa sia la connessione e sia il DataInputStream utilizzato per leggere ibyte. 39
  40. 40. CONCLUSIONIIn questo capitolo si verifica se gli obiettivi, che sono stati prefissati all’inizio di questoprogetto di tesi, sono stati raggiunti.Lo scopo della presente tesi è quello di ampliare e migliorare unapplicazione in grado digestire e visualizzare, su un generico dispositivo mobile, il contenuto di un messaggio diallerta, conforme al protocollo CAP.Il contributo, che è stato dato nella presente tesi, consiste nella visualizzazione di unamappa contenente linformazione georiferita che identifica la zona interessata dall’eventodescritto nel messaggio.Il risultato a cui siamo giunti è il miglioramento di questa applicazione, non destinatoall’utilizzo nella forma in cui si trova, ma che necessita ancora di alcune aggiunte emodifiche che potrebbero rendere tale applicazione maggiormente utilizzabile.Il prototipo, che era inizialmente composto unicamente da due classi, ora è articolato inquattro classi, ognuna delle quali ha un compito ben specifico, e assieme costituiscono unarete di interazioni e operazioni che permettono all’utente, che utilizza questa applicazione,di interagire con essa in modo facile ed intuitivo.Nei capitoli precedenti ci siamo concentrati su alcuni importanti requisiti, che sono stati lelinee guida che ci hanno permesso di elaborare e progettare questa applicazione creando,appunto, ciò che ci eravamo prefissati di ottenere.Riprendendo i quattro requisiti principali, determinati nel capitolo 3, possiamo fare qualcheconsiderazione ora che la nostra applicazione è finita e funzionante:1. Gestione ed estrazione di informazioni specifiche da un documento XML: questo primo requisito è stato soddisfatto pienamente, in quanto nel documento XML vengono estratte le informazioni inerenti alla georeferenziazione del luogo interessato dall’evento di emergenza, contenute negli elementi <circle> e <polygon>; nel caso in cui nel messaggio non siano presenti questi due elementi, l’applicazione riesce a gestire questa situazione senza bloccarsi o generare errori.2. Indipendenza dalla piattaforma di esecuzione: questo requisito è stato rispettato già nel prototipo di base dal quale si è partiti per elaborare questo progetto; infatti si è utilizzato, come linguaggio di programmazione per l’applicazione, Java che permette di eseguire questo prototipo su qualsiasi 40
  41. 41. dispositivo che è in grado di utilizzare la Java Virtual Machine, responsabile del caricamento del codice, dell’isolamento del runtime Java dal resto del sistema operativo, della gestione della memoria, dei thread e delle altre risorse fondamentali per l’esecuzione delle applicazioni.3. Necessità di esecuzione su dispositivi mobili: l’utilizzo del linguaggio Java, e in particolare quello nella versione dedicata all’utilizzo nei dispositivi mobili, Java Micro Edition, soddisfa anche questo importante requisito. Java ME è un nuovo tipo di piattaforma modulare, flessibile, portabile ed economica, che si concentra sullo sviluppo e l’esecuzione delle applicazioni per sistemi mobili; è un’architettura appositamente progettata per risolvere le problematiche di questo particolare settore applicativo.4. Collegamento ad internet e la visualizzazione della mappa: l’accesso ad internet è ormai un requisito fondamentale per un qualsiasi dispositivo programmabile; la piattaforma Java ME è stata progettata fin dal principio con un forte orientamento alla connettività, in termini di funzionalità e di supporto alla sicurezza. Le API standard consentono agli sviluppatori di accedere ai servizi principali della rete e agli utenti di disporre di potenti applicazioni network-oriented sui propri terminali mobili. In ambito networking, i limiti di un dispositivo possono consistere nella mancanza del supporto per un determinato protocollo, in un vincolo sulle modalità di accesso ai dati, etc; le reti di telefonia mobile espongono criticità specifiche che possono condizionare, se non del tutto impedire, le operazioni di networking dei dispositivi. Accesso su rete privata, connessione automatica attraverso un proxy (programma che si interpone tra un client e un server facendo da tramite o interfaccia tra i due host, ovvero inoltrando le richieste e le risposte dall’uno all’altro) e filtraggio di certi tipi di connessione, rappresentano situazioni spesso imprevedibili che possono inibire il funzionamento di applicazioni perfettamente collaudate in altri contesti. 41
  42. 42. BIBLIOGRAFIA[1] Disaster Risk Reduction Strategies and Risk Management Practices: Critical Elements for Adaptation to Climate Change, Submission to the UNFCCC Adhoc Working Group on Long Term Cooperative Action by The Informal Taskforce on climate change of the Inter-Agency Standing Committee1 and The International Strategy for Disaster Reduction2, 11 November 2008.[2] OASIS Common Alerting Protocol version 1.2 http://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html[3] Vos F, Rodriguez J, Below R, Guha-Sapir D. Annual Disaster Statistical Review 2009: The Numbers and Trends. Brussels: CRED; 2010 European Environment Agency, Mapping the impacts of natural hazards and technological accidents in Europe — An overview of the last decade. Copenhagen: EEA, 2010.[4] Raffaela Cefalo, Integration of SatCom/SatNav Technologies for Environmental Monitoring and Management of Emergencies, 3rd ICG Meeting Pasadena, Los Angeles, 8-12 December 2008, http://www.unoosa.org/pdf/icg/2008/icg3/29.pdf[5] Calderan M., Cefalo R., Montefusco C., Development and Applications of an Experimental Data Server hosting EGNOS and RTCM /RTK messages, 3rd ICG Meeting Pasadena, Los Angeles, 8-12 December 2008, http://www.unoosa.org/pdf/icg/2008/icg3/29.pdf[6] Brundl M., Bartelt P., Schweizer J., Keiler M., Glade T., Review and future challenges in snow avalanche risk analysis Geomorphological Hazards and Disaster Prevention, published by Cambridge University, edited by Irasema Alcàntara-Ayala and Andrew Goudie, 2010[7] Glade T., Anderson T., Crozier M., Landslides hazards and risk: issues, concepts and approach eds. Landslide Hazard and Risk. Chichester: John Wiley and Sons, pp 1-40, 2005[8] Varnes D. Landslides Hazards Zonation: A review of Principles and Practise. Paris: UNESCO.[9] JIXEL : http://www.jixel.eu/aboutjixel.php http://www.vigilfuoco.it/aspx/download_file.aspx?id=5963[10] TSO : http://www.tacticalsituationobject.org/documents.html[11] Google Static Maps API : https://developers.google.com/maps/documentation/staticmaps/ 42
  43. 43. [12] Simone Maver, Tesi Ingegneria Informatica : “Formato e trasmissione di messaggi di allerta per la gestione di emergenze ambientali”[13] Attività della protezione civile italiana: http://www.protezionecivile.gov.it/jcms/it/homepage.wp 43
  44. 44. Appendice A – classe CapViewer1 package CapViewer;23 import javax.microedition.lcdui.*;4 import javax.microedition.midlet.*;5 import javax.microedition.io.Connector;6 import javax.microedition.io.HttpConnection;7 import java.io.DataInputStream;8 import java.io.IOException;910 /**11 * @author simonemaver & sabrinacramastetter12 */1314 public class CapViewer extends MIDlet implements CommandListener{1516 private MsgParser parser;1718 protected Display display;19 protected List select1, select2, select3;20 protected Form frm, frm2, frmMap;21 protected StringItem si, si2;22 protected Command exitCmd;23 protected Command backCmd;24 protected Command imageCmd;2526 String filename = "/files/ex1.xml";2728 private ImageItem imageItem;29 private Image aImage;3031 AnalisiXML analisi = new AnalisiXML();32 String coord = analisi.read(filename);33 String pol = analisi.polygon;34 String cir = analisi.circle;35 String URL;3637 public CapViewer() {38 exitCmd = new Command("Exit", Command.EXIT, 1);39 backCmd = new Command("Back", Command.BACK, 1);40 imageCmd = new Command ("ImageMAP", Command.SCREEN, 1);4142 frm = new Form("");43 frm2 = new Form("");44 frmMap = new Form ("CAP MAP");4546 si = new StringItem("", ""); 44
  45. 45. 47 si2 = new StringItem("", "");4849 frm.append(si);50 frm2.append(si2);51 }5253 public void startApp(){54 if (cir == null & pol != null) {URL = "http://maps.googleapis.com/maps/api/"+55 "staticmap?size=250x270&path=" + pol +&maptype=hybrid&sensor=false";}56 else if (pol == null & cir != null){URL ="http://maps.googleapis.com/maps/api/"+57 "staticmap?center=" + cir + "&zoom=13&size=250x270&maptype=hybrid&"+58 "markers=color:blue%7C" + cir + "&sensor=false";}59 else{URL="http://upload.wikimedia.org/wikipedia/en/d/d1/Image_not_avaibile.png";}6061 parser = new MsgParser(filename);6263 select1 = new List("Message Content: ",List.IMPLICIT,parser.parseElement(null, 1),64 null);65 select1.addCommand(exitCmd);66 select1.addCommand(imageCmd);67 select1.setFitPolicy(Choice.TEXT_WRAP_ON);68 select1.setCommandListener(this);69 display.setCurrent(select1);7071 frm.addCommand(backCmd);72 frm.setCommandListener(this);73 frm2.addCommand(backCmd);74 frm2.setCommandListener(this);7576 try{ loadImage a = new loadImage();77 aImage = a.loadImage(URL);78 imageItem = new ImageItem (null, aImage, ImageItem.LAYOUT_CENTER, "CAP MAP");79 } catch (IOException ioe){ }8081 frmMap.append(imageItem);82 frmMap.addCommand(backCmd);83 frmMap.setCommandListener(this);84 }8586 public void pauseApp(){}8788 public void destroyApp(boolean unconditional){}8990 public void commandAction(Command c, Displayable d){91 if(c == exitCmd){92 destroyApp(false);93 notifyDestroyed(); }94 if (c == imageCmd) { display.setCurrent(frmMap);}95 if(c == List.SELECT_COMMAND){ 45
  46. 46. 96 int list_level;97 if( d == select1){98 list_level = 1;99 String selection = select1.getString(select1.getSelectedIndex());100 if(selection.equals("info")) {101 select2 = new List(selection.toUpperCase(),List.IMPLICIT,102 parser.parseElement(selection,list_level),null);103 select2.addCommand(backCmd);104 select2.addCommand(exitCmd);105 select2.setFitPolicy(Choice.TEXT_WRAP_ON);106 select2.setCommandListener(this);107 display.setCurrent(select2);108 } else { si.setLabel(selection);109 si.setText(parser.parseElement(selection, list_level)[0]);110 display.setCurrent(frm);}111 } else if(d == select2){112 list_level = 2;113 String selection2 = select2.getString114 (select2.getSelectedIndex());115 if(selection2.equals("eventCode")||116 selection2.equals("parameter")) {117 si2.setLabel(selection2 + "n");118 String str = "";119 for(int i=0; i<parser.parseElement(selection2,120 list_level).length;i++) {121 str += parser.parseElement(selection2,122 list_level)[i]; }123 si2.setText(str);124 display.setCurrent(frm2);125 } else if(selection2.equals("resource") || selection2.equals("area")){126 select3 = new List(selection2.toUpperCase(),List.IMPLICIT,127 parser.parseElement(selection2,list_level),null);128 select3.addCommand(backCmd);129 select3.addCommand(exitCmd);130 select2.addCommand(exitCmd);131 select3.setFitPolicy(Choice.TEXT_WRAP_ON);132 select3.setCommandListener(this);133 display.setCurrent(select3);134 }else { si2.setLabel(selection2);135 si2.setText(parser.parseElement(selection2, list_level)[0]);136 display.setCurrent(frm2);137 }138 }139 }140 if(c == backCmd){ // controlla gli eventi del comando Back141 if(d == frm || d == select2){ display.setCurrent(select1); }142 if(d == frm2 || d == select3){ display.setCurrent(select2); }143 if(d == frmMap ){ display.setCurrent(select1); }144 }}} 46
  47. 47. Appendice B – Classe MsgParser1 package CapViewer;23 import java.io.IOException;4 import java.io.InputStream;5 import java.io.InputStreamReader;6 import java.util.Vector;7 import org.kxml.Xml;8 import org.kxml.kdom.*;9 import org.kxml.parser.*;1011 /**12 * @author simonemaver13 */1415 public class MsgParser{1617 private XmlParser parser = null;18 private Document doc;19 private Element root;2021 protected MsgParser(String filename){22 doc = new Document();23 try { InputStream in = this.getClass().getResourceAsStream(filename);24 InputStreamReader is = new InputStreamReader(in);25 parser = new XmlParser(is);26 doc.parse(parser);27 parser = null;28 }catch(IOException ioe){ System.err.println(ioe);29 ioe.printStackTrace();30 parser = null;31 doc = null;32 }33 root = doc.getRootElement();34 }3536 protected String[] parseElement(String el_name, int level){37 String[] str_arr = null;38 Vector v_str = new Vector();3940 if(level == 1){41 if(el_name == null){42 for(int i = 0; i < root.getChildCount(); i++){43 if(root.getType(i) == Xml.ELEMENT){44 v_str.addElement(root.getElement(i).getName());}45 }46 } else if(root.getElement(el_name).getType(0) == Xml.TEXT){ 47
  48. 48. 47 v_str.addElement(root.getElement(el_name).getText());48 } else if(el_name.equals("info")){49 for(int j = 0; j < root.getElement("info").getChildCount(); j++){50 if(root.getElement("info").getType(j) != Xml.ELEMENT){ continue; }51 if(root.getElement("info").getElement(j).getType(0) == Xml.TEXT){52 v_str.addElement(root.getElement("info").getElement(j)53 .getName());54 continue;}55 v_str.addElement(root.getElement("info").getElement(j).getName());56 }57 }58 } else if(level == 2){59 if(root.getElement("info").getElement(el_name).getType(0) == Xml.TEXT){60 v_str.addElement(root.getElement("info").getElement(el_name).getText());61 } else if(el_name.equals("eventCode") || el_name.equals("parameter")){62 for(int i = 0; i <root.getElement("info").getElement(el_name).63 getChildCount(); i++){64 if(root.getElement("info").getElement(el_name).getType(i)!=65 Xml.ELEMENT){ continue; }66 if(root.getElement("info").getElement(el_name).getElement(i)67 .getType(0) == Xml.TEXT){68 v_str.addElement("-"+root.getElement("info").69 getElement(el_name).getElement(i).getName()+": ");70 v_str.addElement(root.getElement("info").71 getElement(el_name).getElement(i).getText()+"n");72 continue;73 }74 }75 } else if(el_name.equals("resource") || el_name.equals("area")){76 for(int i = 0; i < root.getElement("info").getElement(el_name).77 getChildCount(); i++){78 if(root.getElement("info").getElement(el_name).getType(i) !=79 Xml.ELEMENT){continue; }80 if(root.getElement("info").getElement(el_name).getElement(i).81 getType(0) == Xml.TEXT){82 v_str.addElement(root.getElement("info").83 getElement(el_name).getElement(i).getName()+": "+84 root.getElement("info").getElement(el_name).85 getElement(i).getText());86 continue;87 }88 v_str.addElement(root.getElement("info").getElement(el_name).89 getElement(i).getName());90 for(int j = 0; j < root.getElement("info").getElement(el_name).91 getElement(i).getChildCount(); j++){92 if(root.getElement("info").getElement(el_name).93 getElement(i).getType(j) != Xml.ELEMENT){ continue; }94 if(root.getElement("info").getElement(el_name).95 getElement(i).getElement(j).getType(0) == Xml.TEXT){ 48
  49. 49. 96 v_str.addElement("-"+root.getElement("info").getElement97 (el_name).getElement(i).getElement(j). getName()+": "+98 root.getElement("info").getElement(el_name).getElement(i).99 getElement(j).getText());100 continue;}101 }102 }103 }104 }105 str_arr = new String[v_str.size()]; // Si converte da vettore a stringa106 for(int i = 0; i < v_str.size(); i++){str_arr[i] = (String)v_str.elementAt(i);}107 return str_arr;108 }109 } 49
  50. 50. Appendice C – classe AnalisiXML1 // Analisi del documento XML per lestrazione delle informazioni necessarie alla2 // creazione e visualizzazione della mappa associata al messaggio CAP3 package CapViewer;45 import java.io.IOException;6 import java.io.InputStream;7 import java.io.InputStreamReader;8 import java.util.Vector;9 import org.kxml.kdom.*;10 import org.kxml.parser.*;1112 /** java.io.IOException è la classe generale delle eccezioni prodotte da13 * operazioni di I/O fallite o interrotte14 *15 * java.io.InputStream è la superclasse di tutte le classi che rappresentano un16 * flusso di input di byte17 *18 * java.io.InputStreamReader è una classe che legge i byte e li trasforma in19 * caratteri utilizzando uno specifico charset20 *21 * java.util.Vector implementa degli array di object e si può modificare la22 * lunghezza del vettore durante lesecuzione; si hanno, oltre ai costruttori,23 * 3 tipi di metodi, metodi per modificare il vettore, metodi per ottenere i24 * valori presenti nel vettore e metodi per gestire la crescita del vettore25 *26 * org.kxml.kdom.* è un pacchetto che fornisce un limitato modello del documento27 * oggetto; al fine di consentire la generazione personalizzata di un oggetto in28 * J2ME, viene aggiunto un costruttore di default e il costruttore esistente29 * verrà sostituito dal metodo init30 *31 * org.kxml.parser.* è un pacchetto che contiene le classi relative allanalisi32 * dei dati xml33 * /3435 /**36 * @author sabrinacramastetter37 */3839 // La classe AnalisiXML ha il compito di gestire il codice XML40 public class AnalisiXML{41 // Dichiarazione delle variabili per laccesso al file XML42 private XmlParser parser = null;43 private Document doc;44 private Element root;4546 // Dichiarazione delle variabili che verranno utilizzate per la trasmissione 50

×