Sviluppo di un applicativo di localizzazione GPS per Google … do gruppo rientrano la rete...
Transcript of Sviluppo di un applicativo di localizzazione GPS per Google … do gruppo rientrano la rete...
UNIVERSITA degli STUDI di ROMATOR VERGATA
Ingegneria dell’Informazione - Ind. Sistemi
Sviluppo di un applicativo di
localizzazione GPS per
Google Android
FRANCESCO SERAFINI
Relatore:
Prof.ssa Berta Buttarazzi
Anno Accademico 2008 / 2009
Indice
Prefazione 3
Introduzione 4
1 Concetti di base 6
1.1 GIS - Geographical Information System . . . . . . . . . . . . . 7
1.1.1 Funzionamento dei sistemi GIS . . . . . . . . . . . . . 8
1.2 Aree di applicazione . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Geolocalizzazione . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.1 GPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.2 NMEA . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4 Peer to peer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.1 Localizzazione . . . . . . . . . . . . . . . . . . . . . . . 15
1.4.2 STUN . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.5 Comunicazione mobile . . . . . . . . . . . . . . . . . . . . . . 15
1.5.1 Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.5.2 GPRS - UMTS . . . . . . . . . . . . . . . . . . . . . . 18
2 Descrizione del progetto 20
2.1 Dispositivi mobili . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.1 Acquisizione della posizione . . . . . . . . . . . . . . . 21
2.1.2 Connettivita verso la rete . . . . . . . . . . . . . . . . 21
2.1.3 Funzionamento del dispositivo all’interno di una rete . 21
2.2 Nodo centrale . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Sviluppo del progetto 23
3.1 Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2 Fasi di sviluppo dell’applicativo . . . . . . . . . . . . . . . . . 25
3.2.1 Mappe . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1
INDICE 2
3.2.2 Sviluppo del supernodo . . . . . . . . . . . . . . . . . . 32
Conclusioni 34
Appendici 36
A Creazione dell’interfaccia 36
A.1 Android Manifest . . . . . . . . . . . . . . . . . . . . . . . . . 36
A.2 R.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
B Android e Google Maps 39
B.1 AndroidMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
B.2 MapOverlay . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
B.3 MyLocationListener . . . . . . . . . . . . . . . . . . . . . . . . 51
C Altre classi di utilita 53
C.1 HTTPSend . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
C.2 Punto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
C.3 Utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Bibliografia 59
Elenco delle figure
1.1 Somma di layer che rappresentano una mappa . . . . . . . . . 7
1.2 Proiezione dati GIS sulla mappa . . . . . . . . . . . . . . . . . 8
1.3 Esempio di dati raster . . . . . . . . . . . . . . . . . . . . . . 9
1.4 Satelliti intorno alla terra . . . . . . . . . . . . . . . . . . . . 11
1.5 Rappresentazione di una rete P2P . . . . . . . . . . . . . . . . 14
1.6 Funzionamento del protocollo STUN . . . . . . . . . . . . . . 16
1.7 Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.8 Piu dispositivi connessi ad un access point Wi-Fi . . . . . . . 17
1.9 GPRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1 Rappresentazione grafica del progetto . . . . . . . . . . . . . . 20
3.1 Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Schermata in stand-by del sistema operativo Google Android . 25
3.3 Rappresentazione di un punto sulla mappa . . . . . . . . . . . 27
3.4 Piu utenti presenti nel sistema . . . . . . . . . . . . . . . . . . 28
3.5 Cliccando sul punto, viene visualizzato l’indirizzo e coordinate 29
3.6 Si puo fare lo Zoom fino alla posizione desiderata . . . . . . . 30
3.7 Passare alla visualizzazione via satellite . . . . . . . . . . . . . 31
3
Prefazione
Negli ultimi 5 anni si e registrata una crescita continua di servizi web per
la pianificazione di viaggi e vacanze. Questa crescita ha portato sempre piu
persone ad organizzare le proprie vacanze in autonomia, con un sensibile de-
cremento della spesa e senza la necessita di intermediari (agenzie di viaggio
ecc..). Societa come Lastminute.com, Expedia.it, o le stesse compagnie aeree,
permettono a chiunque, con facilita, di prenotare voli o notti in albergo at-
traverso il web. Questo fenomeno ha modificato sensibilmente l’approccio di
molte persone nei confronti delle proprie vacanze, portandole a svincolarsi dal
concetto di viaggio organizzato, con riferimenti, orari e luoghi solitamente pre-
fissati. La tecnologia puo venire in aiuto del viaggiatore attraverso strumenti
di informazione e comunicazione, che lo rendono totalmente indipendente
nella gestione del proprio soggiorno.
Dispositivi mobili, come palmari o smartphone, si trasformano in assistenti
di viaggio, fornendo informazioni turistiche, o comunque di interesse, legate al
luogo in cui ci si trova. Analogamente, diventa fondamentale la possibilita di
restare in contatto con tutti gli elementi del gruppo, data l’assenza di figure
di riferimento come guide o agenti di viaggio.
Nasce quindi l’esigenza di sviluppare un sistema di comunicazione basato
su rete IP orientato a dispositivi mobili, che sia in grado di coordinare e faci-
litare gli spostamenti di viaggiatori che si muovono in gruppo. E’ ragionevole
pensare che chi usufruisce di questi servizi, viaggi con almeno un telefono
cellulare, un personal computer o un palmare. A tale proposito il progetto
vertera su argomenti legati alla comunicazione mobile, alla geolocalizzazione
ed al trasferimento dati peer to peer.
4
Introduzione
Il lavoro svolto consiste nello sviluppo di un’applicazione che permetta a di-
spositivi mobili di determinare e condividere la propria posizione attraverso la
rete. La piattaforma utilizzata e un framework J2ME, sviluppato da Google
con il nome Android.
La scelta di questa piattaforma e legata principalmente alla disponibilita
di codice sorgente (Android e rilasciato con licenza open-source) e al successo
consolidato dei prodotti Google, di cui Android ne costituisce l’avanguardia.
Soprattutto, rappresenta il perfetto collegamento tra il dispositivo mobile e i
servizi remoti di cui fa uso, entrambi prodotti da Google (es. Google Maps).
L’applicazione e in grado di connettersi ad una sorgente di coordinate
spaziali (GPS), tracciarle, rappresentarle su di una mappa (geolocalizzazione)
e inviarle, attraverso la rete, ad altri dispositivi. Questi potranno visualizzare
sulla stessa mappa, sia la propria posizione, che quella ricevuta, in modo da
costruire dinamicamente un sistema di tracciatura dei nodi presenti nella rete.
Trattandosi di un dispositivo non ancora in commercio, e stato utilizzato un
emulatore rilasciato da Google, come plug-in del noto IDE Eclipse.
5
Capitolo 1
Concetti di base
La possibilita di determinare, via GPS o rete cellulare, la propria posizione
sul globo terrestre, abbinata alla sua ritrasmissione mediante GPRS/UMTS,
rende oggi tecnicamente possibile la fornitura di servizi a valore aggiunto
basati sulla localizzazione, indicati con la sigla LBS acronimo di Location
Based Services.
Dato che il concetto di localizzazione puo assumere una portata differen-
te, a seconda delle finalita perseguite, tali servizi hanno conseguentemente
un campo di applicazione molto vasto, che abbraccia le applicazioni destina-
te alla navigazione su strada, alla gestione delle emergenze ed alla sicurezza
delle persone, delle cose o degli animali, ma anche quelle relative all’intrat-
tenimento, alla comunicazione sociale ed a quella di natura commerciale (in-
formazioni sulla vicinanza di ristoranti, alberghi, centri commerciali, stazioni
di rifornimento, ecc....).
Da un punto di vista tecnologico il funzionamento dei sistemi di localizza-
zione puo essere incentrato su una rete cellulare oppure esterno, a seconda che
la sorgente delle informazioni rientri o meno sotto il controllo di un operatore
di comunicazioni.
Alla prima categoria appartengono le reti GSM/UMTS, mentre nel secon-
do gruppo rientrano la rete satellitare GPS (Global Positioning System),
i sistemi di posizionamento peer to peer o quelli basati su reti wireless.
L’architettura complessiva prevede, di regola, il coinvolgimento di tre en-
tita: un fornitore di servizi, l’utente ed un operatore che agisce da interme-
diario, trasmettendo i dati di localizzazione al fornitore che li combina con
quelli geografici per erogare i servizi richiesti.
6
CAPITOLO 1. CONCETTI DI BASE 7
1.1 GIS - Geographical Information System
Un sistema informativo territoriale (in inglese Geographical Information
System o GIS) e un insieme di strumenti software in grado di produrre,
gestire e analizzare dati spaziali, associando a ciascun elemento geografico
una o piu descrizioni alfanumeriche.
Figura 1.1: Somma di layer che rappresentano una mappa
L’espressione Geographical Information System caratterizza quei program-
mi informatici in grado di georeferenziare le informazioni e fornire risposte a
problemi di natura territoriale. Questi dispositivi rappresentano una innova-
zione epocale nella gestione e nella produzione cartografica. Essi si basano sul-
la fusione di due innovazioni informatiche: i sistemi di disegno computerizzato
(CAD) e i data base relazionali (DBMS).
Il primo sistema ha permesso il disegno computerizzato delle entita geo-
grafiche e il secondo l’immagazzinamento dei dati e delle informazioni legate
a queste entita.
La fusione di questi due sistemi nei GIS ha permesso di analizzare un’en-
tita geografica, sia per la sua completa natura geometrica (e simbolica), sia
per il suo totale contenuto informativo, superando il problema delle rappre-
sentazioni simboliche e in scala.
CAPITOLO 1. CONCETTI DI BASE 8
1.1.1 Funzionamento dei sistemi GIS
Diversamente dai programmi di disegno assistito da calcolatore o dai modelli
di cartografia numerica, i GIS dispongono di specifici strumenti di analisi
quali la ricerca di elementi distribuiti nel territorio e la loro selezione per
attributi (ad esempio: la selezione di tutte le strade di un ambito territoriale
con flussi di traffico), la rappresentazione di aree di influenza, la scomposizione
delle immagini in livelli (layer o theme, come le curve di livello, il reticolato
idrografico, etc.) e la loro, sovrapposizione (map overlay), la generazione
di modelli digitali del terreno, la scelta della modalita di rappresentazione
mediante il cambio di scala o di proiezione.
I GIS hanno due componenti:
• componente grafica
• componente alfanumerica
La parte grafica (geografica) e georeferenziata, ossia il posizionamento
spaziale del dato avviene tramite sistemi di proiezione basati su convenzioni
specifiche (esempio unita di misura).
Figura 1.2: Proiezione dati GIS sulla mappa
Utilizzare lo stesso sistema di proiezione implica:
• sovrapposizione di dati geografici
• maggiori possibilita di analisi
I tipi di dati possono invece essere di tre tipi:
CAPITOLO 1. CONCETTI DI BASE 9
• dati raster : costituiti da una matrice di celle che generano un’immagine
non interrogabile ed e utilizzato per la gestione di immagini (nel caso dei
GIS, immagini telerilevate: fotografie da aereo o immagini satellitari)
che vengono acquisite punto per punto, mediante scanner.
• dati vettoriali : rappresentano i campi attraverso punti, linee, superfici
che definiscono gli oggetti cui vengono associati gli attributi.
Figura 1.3: Esempio di dati raster
Il formato vettoriale e utilizzato per la gestione delle cartografie numeriche
che vengono acquisite per vettori, generalmente mediante tavola digitalizza-
trice. Tale formato e piu integrato del precedente ai processi di risposta alle
interrogazioni.
CAPITOLO 1. CONCETTI DI BASE 10
1.2 Aree di applicazione
L’utilita di un GIS e evidente:
• In tutti i settori in cui l’impiego della cartografia geografica o topogra-
fica (settori militari, industriali, amministrativi etc.) risulta strategico:
come la gestione dei fondi per la difesa di uno stato; nella scelta su do-
ve collocare nuove cliniche e ospedali, fondamentale per i responsabili
del settore sanitario; oppure nella scelta, altrettanto fondamentale per
una societa di trasporti, dei percorsi da seguire per effettuare le proprie
consegne.
• In tutti i settori di impiego e sviluppo della cartografia geotematica,
geologica, geomorfologia, idrogeologica, delle risorse, forestale, ambien-
tale. Una compagnia forestale, ad esempio, deve sapere dove piantare
o tagliare degli alberi e deve conoscere strade e sentieri per accedervi;
un servizio geologico deve conoscere la distribuzione di frane, sorgenti,
cave sondaggi, etc..
• In tutti i settori di pianificazione territoriale: un ente pubblico che
gestisce il territorio impiega GIS per la redazione e lo sviluppo dei piani
urbanistici (piani regolatori, piani territoriali di coordinamento o piani
strutturali); un turista o chiunque si trovi a effettuare un viaggio deve
fare delle scelte sul luogo in cui recarsi, su come recarvisi e sul posto in
cui eventualmente alloggiare.
CAPITOLO 1. CONCETTI DI BASE 11
1.3 Geolocalizzazione
1.3.1 GPS
Il Global Positioning System (abbreviato in GPS), e un sistema di po-
sizionamento su base satellitare, a copertura globale e continua, gestito dal
dipartimento della difesa statunitense.
Nel 1991 gli USA aprirono al mondo il servizio con il nome SPS (Standard
Positioning System), con specifiche differenziate da quello militare deno-
minato PPS (Precision Positioning System). In pratica veniva introdotta
la cosiddetta Selective Availability (SA) che introduceva errori intenzio-
nali nei segnali satellitari allo scopo di ridurre l’accuratezza della rilevazio-
ne, consentendo precisioni solo nell’ordine di 100-150 m. Tale degradazione
del segnale e stata disabilitata dal mese di maggio 2000, mettendo cosı a
disposizione degli usi civili la precisione attuale di circa 10-20 m.
Figura 1.4: Satelliti intorno alla terra
Attualmente ci sono 31 satelliti attivi nella costellazione GPS. I satelliti
supplementari migliorano la precisione del sistema permettendo misurazioni
CAPITOLO 1. CONCETTI DI BASE 12
ridondanti. Al crescere del numero di satelliti, la costellazione e stata modi-
ficata secondo uno schema non uniforme che si e dimostrato maggiormente
affidabile in caso di guasti contemporanei a piu satelliti.
Il sistema di navigazione si articola nelle seguenti componenti:
• un complesso di minimo 24 satelliti, divisi in gruppi di quattro su ognuno
dei sei piani orbitali (distanti 60◦ fra loro e inclinati di 55◦ sul piano
equatoriale)
• 2 cicli al giorno
• una rete di stazioni di tracciamento (tracking station)
• un centro di calcolo (computing station)
• due stazioni di soccorrimento (injection stations)
• un ricevitore GPS
Il principio di funzionamento si basa su un metodo di posizionamento
sferico, che consiste nel misurare il tempo impiegato da un segnale radio a
percorrere la distanza satellite-ricevitore. Conoscendo il tempo impiegato dal
segnale per giungere al ricevitore e l’esatta posizione di almeno 3 satelliti
per avere una posizione 2D (bidimensionale), e 4 per avere una posizione
3D (tridimensionale), e possibile determinare la posizione nello spazio del
ricevitore stesso. Tale procedimento, chiamato trilaterazione, utilizza solo
informazioni di distanza ed e simile alla triangolazione, dal quale tuttavia
si differenzia per il fatto di fare a meno di informazioni riguardanti gli angoli.
La precisione puo essere ulteriormente incrementata grazie all’uso di siste-
mi come il WAAS (statunitense) o l’EGNOS (europeo), perfettamente com-
patibili tra di loro. Consistono in uno o due satelliti geostazionari che inviano
dei segnali di correzione. La modalita Differential-GPS (DGPS) utilizza un
collegamento radio per ricevere dati DGPS da una stazione di terra e ottenere
un errore sulla posizione di un paio di metri. La modalita DGPS-IP sfrutta,
anziche onde radio, la rete Internet per l’invio di informazioni di correzione.
Esistono in commercio ricevitori GPS (esterni), interfacciabili mediante
porta USB o connessioni senza fili come il Bluetooth, che consentono di rea-
lizzare navigatori GPS su vari dispositivi: palmari, PC, computer portatili,
CAPITOLO 1. CONCETTI DI BASE 13
e, se dotati di sufficiente memoria, anche telefoni cellulari. Per la navigazio-
ne esistono software appositi, proprietari o open source che utilizzano una
cartografia, anch’essa pubblica o proprietaria.
1.3.2 NMEA
NMEA 0183 (o piu comunemente NMEA) e uno standard di comunicazione
di dati utilizzato soprattutto in nautica e nella comunicazione di dati satel-
litari GPS. L’ente che gestisce e sviluppa il protocollo e la National Marine
Electronics Association.
Questo protocollo si basa sul principio che la fonte, detta talker, puo
soltanto inviare i dati (sentences) e la ricevente, detta listener, puo soltanto
riceverli.
CAPITOLO 1. CONCETTI DI BASE 14
1.4 Peer to peer
Generalmente per peer-to-peer (o P2P) si intende una rete di computer o
qualsiasi rete informatica che non possiede nodi gerarchizzati come client o
server fissi (clienti e serventi), ma un numero di nodi equivalenti (pari, in
inglese peer appunto) che fungono sia da cliente che da servente verso altri
nodi della rete. I nodi sono indipendenti (autonomi) e localizzati ai bordi
(edge) di Internet.
Figura 1.5: Rappresentazione di una rete P2P
Questo modello di rete e l’antitesi dell’architettura client-server. Mediante
questa configurazione qualsiasi nodo e in grado di avviare o completare una
transazione.
I nodi equivalenti possono differire nella configurazione locale, nella velo-
cita di elaborazione, nell’ampiezza di banda e nella quantita di dati memo-
rizzati. L’esempio classico di P2P e la rete per la condivisione di file (File
sharing).
Il termine peer-to-peer si riferisce a una classe di sistemi e applicazio-
ni che utilizzano risorse distribuite per eseguire una funzionalita (critica) in
modo decentralizzato. In Microsoft tendono a definire con il termine peer-to-
peer una rete di due o piu computer in cui tutti gli elaboratori occupano la
stessa posizione gerarchica. Tale modalita e normalmente conosciuta con il
CAPITOLO 1. CONCETTI DI BASE 15
termine Gruppo di Lavoro, in antitesi alle reti in cui e presente un dominio
centralizzato.
1.4.1 Localizzazione
Al fine di garantire la comunicazione tra i vari peer, e necessario l’utilizzo di
un servizio di localizzazione.
Tale servizio puo essere rappresentato da un server, o piu banalmente da
un file (come nel caso dei .torrent), che serve da indice, sincronizza i vari
utilizzatori che condividono la banda e fornisce il flusso di dati iniziale, che
poi i vari nodi si scambiano.
Quindi, sebbene tecnicamente sia un server, in pratica, dopo aver fornito il
flusso dati iniziale ed aver messo in comunicazione i vari utenti, si disinteressa
della comunicazione che avviene tra di essi, ed il sistema diventa totalmente
peer to peer.
1.4.2 STUN
Esiste tuttavia la possibilita che uno o piu peer si trovi dietro un NAT, una
tecnica utilizzata dai router che consiste nel modificare gli indirizzi IP dei
pacchetti in transito su un sistema di rete.
Come potrebbero questi arrivare a conoscere il proprio indirizzo pubblico,
da comunicare al proxy cui registrarsi, le porte UDP disponibili e la modalita
di NAT adottata?
Qui entra in gioco STUN, un protocollo client/server che permette a par-
ticolari applicazioni di scoprire la presenza ed i tipi di NAT e firewall presenti
tra loro e la rete pubblica.
STUN permette a questi programmi di conoscere gli indirizzi con cui il
dispositivo NAT li sta rendendo visibili alla rete pubblica.
1.5 Comunicazione mobile
1.5.1 Wi-Fi
Wi-Fi, abbreviazione di Wireless Fidelity, e un termine che indica dispositivi
che possono collegarsi a reti locali senza fili (WLAN) basate sulle specifiche
IEEE 802.11.
CAPITOLO 1. CONCETTI DI BASE 16
Figura 1.6: Funzionamento del protocollo STUN
Le reti Wi-Fi sono infrastrutture relativamente economiche e di veloce
attivazione e permettono di realizzare sistemi flessibili per la trasmissione di
dati usando frequenze radio, estendendo o collegando reti esistenti ovvero
creandone di nuove.
L’architettura internet e del tutto simile ai tradizionali ISP che forniscono
un punto di accesso agli utenti che si collegano da remoto.
Figura 1.7: Wi-Fi
La fonte di connettivita a banda larga puo essere via cavo (ADSL o
HDSL), oppure via satellite. Oggi esistono connessioni a internet satellitari
bidirezionali, che consentono alte velocita di trasferimento dei dati sia in
download che in upload. La trasmissione satellitare ha, tuttavia, tempi di
latenza elevati; il tempo di attesa prima che inizi l’invio dei pacchetti, detto
tempo di latenza, e dell’ordine di 1-2 secondi, e quindi un tempo molto grande
se confrontato ai pochi centesimi di secondo necessari ad una connessione
DSL.
CAPITOLO 1. CONCETTI DI BASE 17
A partire dalla fonte di banda, si puo espandere la rete attraverso la
tecnologia Wi-Fi. L’installazione delle antenne e semplice. Si tratta di anten-
ne piccole: normalmente sono scatolotti larghi circa 20 cm e spessi qualche
centimetro, ma possono essere anche piu piccole.
Le antenne wi-fi generalmente sono parabole poste sui tralicci della cor-
rente elettrica e dietro i campanili (che tipicamente sono i punti piu alti nel
paesaggio nazionale). Cio evita un onere elevato per la costruzione di torrette
dedicate. Le antenne delle singole case sono poste sui tetti. E importante
porre in alto i trasmettitori perche in assenza di barriere in linea d’aria il
segnale dell’access point copre distanze di gran lunga maggiori. Le antenne
direttive che amplificano il segnale dell’access point, a parita di distanza in
cui e ricevibile il segnale, sono utilizzabili da piu utenze se poste in alto.
Figura 1.8: Piu dispositivi connessi ad un access point Wi-Fi
CAPITOLO 1. CONCETTI DI BASE 18
Con un access point e possibile coprire con banda larga fino a una di-
stanza di 300 metri teorici (uso domestico) se non vi e alcuna barriera in
linea d’aria. In presenza di muri, alberi o altre barriere il segnale decade a
150 metri.
Tuttavia, con 2-3 antenne direzionali dal costo ancora inferiore la coper-
tura dell’access point sale a 1 km. Il segnale delle antenne direzionali, diver-
samente da quello dell’access point, e sufficientemente potente (in termini di
Watt di potenza trasmissiva) da mantenere lo stesso raggio di copertura di 1
km, inalterato anche in presenza di barriere in linea d’aria.
1.5.2 GPRS - UMTS
Il General Packet Radio Service (GPRS) e una delle tecnologie di telefonia
mobile. E stato progettato per realizzare il trasferimento di dati a media ve-
locita, usando i canali TDMA della rete GSM. Inizialmente si era pensato di
ampliare il GPRS per integrarvi altri sistemi; cio non e avvenuto, anzi sono
stati gli altri sistemi, con le relative reti di trasmissione, ad essere modifica-
ti per essere resi compatibili con lo standard GSM, unica tipologia di rete
cellulare in cui il GPRS e utilizzato.
La massima velocita di una connessione GPRS e circa uguale a quella
ottenibile tramite modem collegato alla normale rete telefonica analogica, e
cioe fra 4 e 5 kB/s, a seconda del modem impiegato. Il tempo di latenza e
piuttosto alto: per averne un ordine di grandezza si consideri che un’opera-
zione di ping (acronimo di Packet Internet Groper) dura di solito 600-700 ms
(a volte anche 1 s).
Normalmente viene data una priorita piu bassa al GPRS rispetto al ca-
nale audio, e per questo motivo, la qualita effettiva della connessione varia
grandemente. In effetti la maggior parte delle limitazioni non sono di natu-
ra tecnica, e quindi le connessioni GPRS potrebbero, in teoria, essere molto
piu performanti di quanto non siano nelle attuali implementazioni nel mondo
reale.
Universal Mobile Telecommunications System (UMTS) e la tecnologia
di telefonia mobile di terza generazione (3G), successore del GSM. Il sistema
UMTS supporta un transfer rate (tasso di trasferimento) massimo di 1920
kb/s. Le applicazioni tipiche attualmente implementate, usate ad esempio
dalla reti UMTS in Italia, sono tre: voce, videoconferenza e trasmissione
dati a pacchetto. Ad ognuno di questi tre servizi e assegnato uno specifico
CAPITOLO 1. CONCETTI DI BASE 19
Figura 1.9: GPRS
transfer rate, per la voce 12,2 kb/s, 64 kb/s per la videoconferenza e 384 kb/s
per trasmissioni di tipo dati. UMTS e quindi in grado, potenzialmente, di
consentire per la prima volta l’accesso, a costi contenuti, di dispositivi mobili
al World Wide Web di Internet.
Dal 2004 sono presenti anche in Italia l’UMTS 2 e l’UMTS 2+ (si legga 2
plus), due estensioni del protocollo UMTS, che funzionano sulle attuali reti
UMTS e raggiungono velocita rispettivamente di 1,8 e 3 Mb/s.
Le attuali reti UMTS sono state potenziate mediante i protocolli High-
Speed Downlink Packet Access (HSDPA), e High-Speed Uplink Packet Access
(HSUPA) con una velocita massima teorica di scaricamento dati in download
di 14,4 Mb/s e in upload di 7,2 Mb/s. Con il lancio di tariffe flat su tecnologia
HSDPA, e con l’implementazione della tecnologia HSUPA (che migliore la
velocita in upload), i servizi definiti a banda larga mobile possono essere
considerati come alternativa alle connessioni ADSL fisse.
Capitolo 2
Descrizione del progetto
Il sistema che si vuole sviluppare e costituito da una serie di dispositivi mo-
bili in grado di rilevare la propria posizione (longitudine, latitudine) e di
scambiarla con altri utenti via rete, coordinati da un nodo centrale.
Figura 2.1: Rappresentazione grafica del progetto
2.1 Dispositivi mobili
Per dispositivo mobile si intende un PDA o uno Smartphone, che attraverso
un’antenna GPS, sia in grado di rilevare e trasmettere, con frequenza stabilita,
la propria posizione ad altri dispositivi presenti nella rete.
20
CAPITOLO 2. DESCRIZIONE DEL PROGETTO 21
2.1.1 Acquisizione della posizione
Affinche il dispositivo sia in grado di localizzare se stesso e necessaria un’inter-
faccia verso un sistema satellitare di posizionamento globale (GPS). Questa
interfaccia e solitamente costituita da un’antenna GPS, connessa direttamen-
te al dispositivo, o tramite collegamento radio bluetooth. Questa comunica
la posizione al dispositivo con una serie di stringhe definite nel protocollo
NMEA.
2.1.2 Connettivita verso la rete
A questo punto, il dispositivo deve rendere nota la propria posizione invian-
dola a tutti gli elementi della rete. Questo avviene attraverso interfacce radio
basate su diffusi protocolli di comunicazione, come 802.11 (Wi-Fi), UMTS,
HSDPA ecc..
2.1.3 Funzionamento del dispositivo all’interno di una
rete
La rete e strutturata in maniera tale da permettere ad ogni nodo di avere una
mappa quanto piu possibile aggiornata della posizione di tutti gli altri nodi.
Questo significa che ogni nodo ricevera ed inviera informazioni a tutti i nodi
connessi in un dato momento.
E’ gia stato definito il modo in cui il dispositivo comunica informazioni
relative a se stesso, ma e importante definirne il comportamento in fase di
ricezione.
La ricezione prevede che il dispositivo abbia gia stabilito, tramite il nodo
centrale, un collegamento con uno o piu nodi.
Le informazioni che questi inviano contribuiranno a costruire un catalogo
dinamico rappresentabile su di una mappa come serie di punti georeferenziati.
CAPITOLO 2. DESCRIZIONE DEL PROGETTO 22
2.2 Nodo centrale
Il nodo centrale e costituito da un server, che ha la funzione di rendere possi-
bile la ricerca di nodi ed il collegamento fra di essi. L’utilizzo di un nodo cen-
trale, si rende necessario per collezionare, e rendere disponibili, informazioni
sui nodi connessi (nome, indirizzo ip) e, soprattutto, per aiutare questi ultimi
a stabilire connessioni in presenza di impedimenti come NAT o Firewall.
La prima funzione del supernodo ricorda il servizio di risoluzione dei
nomi (DNS), operando pero in maniera dinamica, sulla base degli indirizzi
con cui ogni dispositivo e collegato alla rete IP. Fin qui il ruolo del supernodo
e limitato ad una sorta di rubrica telefonica, dato che, una volta nota la
referenza di un nodo, e possibile accedervi. Tuttavia bisogna considerare il
fatto che non sempre la referenza di un nodo sia quella effettiva. Un esempio
e dato dalla presenza di sistemi di mascheramento dell’indirizzo IP (NAT),
che impediscono connessioni dirette in ingresso.
Per superare questo genere di problemi, si dota il supernodo di funzionalita
di rete a piu basso livello (IP), in maniera da farlo operare come un ponte fra
due dispositivi altrimenti non in grado comunicare.
Capitolo 3
Sviluppo del progetto
Per perseguire l’obiettivo, sara utilizzata una piattaforma di sviluppo stan-
dard (J2ME) su un dispositivo di nuovissima generazione come lo smartphone
Android di Google.
3.1 Android
Android e una piattaforma open source per telefoni cellulari, basata sul siste-
ma operativo Linux e sviluppata dall’Open Handset Alliance. La piattaforma
ha a disposizione delle librerie dedicate, come il database SQLite o SGL e
OpenGL dedicate alla grafica, un application framework, la Dalvik virtual
machine (una Java virtual machine modificata) come ambiente di runtime
e una serie di applicazioni preinstallate come un browser, una rubrica o un
calendario.
Il 12 novembre 2007 l’OHA ha rilasciato il software development kit (SDK)
che include: strumenti di sviluppo, librerie, un emulatore del dispositivo, la
documentazione (in inglese), alcuni progetti di esempio, tutorial, FAQ, e altro.
Pesa 58 Megabyte ed e installabile su qualsiasi computer x86 che usa come
sistema operativo Windows XP o Vista, Mac OS X 10.4.8 e successivi, o
Linux. E anche possibile utilizzare il plug-in per Eclipse. L’SDK e stato
aggiornato alla versione 0.9 il 18 agosto 2008, questa nuova versione pesa
90 Megabyte, ed e ormai la definitiva , saranno infatti minime le modifiche
effettuate con il rilascio della versione 1.0, di cui saranno dotati i primi device.
23
CAPITOLO 3. SVILUPPO DEL PROGETTO 24
Figura 3.1: Android
Il primo dispositivo mobile dotato della piattaforma Android e il T-Mobile
G1, prodotto dalla societa taiwanese HTC e commercializzato dal carrier
telefonico T-Mobile.
Il prodotto e stato presentato il 23 Settembre a New York, mentre la data
di uscita nel mercato e prevista per il 22 Ottobre 2008. Le caratteristiche
principali del dispositivo sono: tastiera QWERTY, schermo touchscreen da
3.2 pollici con risoluzione di 320x480 pixel, supporto per la connettivita 3G
UMTS/HSDPA a 7,2 Mbps, 192 MB di RAM e 256 MB di memoria flash.
Il dispositivo sara inzialmente distribuito negli USA e nel Regno Unito, e
sono previsti entro la fine 2009 nuovi dispositivi assemblati da altre case
produttrici. Il CEO di Google ha inoltre ribadito che Android e adattabile a
qualsiasi telefono cellulare, e una nutrita schiera di appassionati sta tentando
gia il porting della piattaforma su dispositivi non ufficialmente supportati e
con sistema operativo diverso.
CAPITOLO 3. SVILUPPO DEL PROGETTO 25
Figura 3.2: Schermata in stand-by del sistema operativo Google Android
3.2 Fasi di sviluppo dell’applicativo
Il programma applicativo e stato sviluppato simulando il comportamento di
Android con un emulatore.
Si tratta di un plug-in per Eclipse, che consente di aiutare lo sviluppatore
a controllare i vari aspetti relativi alla corretta esecuzione del software. E’
infatti possibile definire un percorso GPS, caricando un file KML (Keyhole
Markup Language) nel plug-in.
Questo file e costituito da una serie di coordinate geografiche, che Eclipse
provvedera ad inviare all’emulatore, con cadenza di un secondo, simulando
cosı il tragitto compiuto da una persona.
CAPITOLO 3. SVILUPPO DEL PROGETTO 26
3.2.1 Mappe
Le mappe utilizzate per la visualizzazione grafica della posizione di ogni uten-
te, sono le Google Maps. Il motivo di questa scelta, e la piena compatibilita,
e facilita di interazione, tra i prodotti Google. Infatti nell’SDK di Android,
sono presenti delle API, che permettono di rappresentare, in maniera quasi
immediata, un punto GPS (GeoPoint) sulla Google Map.
public void draw (Canvas canvas , MapView mapView , boolean
shadow ) {// I n i z i a l i z z o i l Paint
Paint pa int = new Paint ( ) ;
pa int . s e tTextS i z e (14) ;
pa int . s e tF i l t e rB i tmap ( true ) ;
pa int . s e tAnt iA l i a s ( true ) ;
pa int . s e t S t y l e ( S ty l e .FILL AND STROKE) ;
pa int . setARGB(255 , 255 , 255 , 255) ;
// Setup per l o s fondo
Paint pa int2 = new Paint ( ) ;
pa int2 . setARGB(150 , 100 , 100 , 100) ;
Point c = new Point ( ) ;
for ( OverlayItem p : mItemList ) {GeoPoint punto = p . getPoint ( ) ;
mapView . g e tP ro j e c t i on ( ) . t oP i x e l s ( punto , c ) ;
RectF f = new RectF ( c . x − ( (11 ∗ p . g e tT i t l e ( ) . l ength ( ) ) /
2) , c . y − 50 , c . x + ((11 ∗ p . g e tT i t l e ( ) . l ength ( ) ) /
2) , c . y − 30) ;
canvas . drawRect ( f , pa int2 ) ;
// Draw our name
canvas . drawText (p . g e tT i t l e ( ) , c . x − ( (7 ∗ p . g e tT i t l e ( ) .
l ength ( ) ) / 2) , c . y − 35 , pa int ) ;
}super . draw ( canvas , mapView , shadow ) ;
MapOverlay . boundCenterBottom ( defaultMarker ) ;
}
CAPITOLO 3. SVILUPPO DEL PROGETTO 27
Figura 3.3: Rappresentazione di un punto sulla mappa
CAPITOLO 3. SVILUPPO DEL PROGETTO 28
Figura 3.4: Piu utenti presenti nel sistema
CAPITOLO 3. SVILUPPO DEL PROGETTO 29
Figura 3.5: Cliccando sul punto, viene visualizzato l’indirizzo e coordinate
CAPITOLO 3. SVILUPPO DEL PROGETTO 30
Figura 3.6: Si puo fare lo Zoom fino alla posizione desiderata
CAPITOLO 3. SVILUPPO DEL PROGETTO 31
Figura 3.7: Passare alla visualizzazione via satellite
CAPITOLO 3. SVILUPPO DEL PROGETTO 32
3.2.2 Sviluppo del supernodo
Il supernodo e costituito da un applicativo server, scritto in PHP,con indi-
rizzo pubblico (raggiungibile), collegato ad un database MySQL, che memo-
rizza le coppie ID/CoordinateGPS dei dispositivi.
Il server riceve tre tipi di sollecitazione :
• il dispositivo notifica il proprio ID e le proprie coordinate al server, che
aggiorna la propria tabella, in base ai nuovi dati ricevuti.
<?
// Link a l DB
include ("configDb.php" ) ;
$ long = $ l a t = $myId = 0 ;
i f ( $ POST [ "latitudine" ] and $ POST [ "longitudine" ] and
$ POST [ "myId" ] ) {$ l a t = $ POST [ "latitudine" ] ;
$ long = $ POST [ "longitudine" ] ;
$myId = $ POST [ "myId" ] ;
$q = "REPLACE INTO tesi.coord SET ‘userid‘ = ’" . $myId .
"’, ‘lat‘ = ’" . $ l a t . "’, ‘long‘ = ’" . $ long . "’, ‘ip‘
= ’" . $ SERVER[ ’REMOTE_ADDR’ ] . "’" ;
mysql query ( $q , $ l i nk ) ;
echo mysql error ( $ l i nk ) ;
}?>
• il dispositivo richiede al server l’indirizzo di un dato utente a partire
dall’identificativo, che risponde con il dato piu recente di cui dispone.
<?php
// Link a l DB
include ("configDb.php" ) ;
CAPITOLO 3. SVILUPPO DEL PROGETTO 33
$ id = 0 ;
i f ($ POST [ "id" ] | | $ GET [ "id" ] ) {i f ($ POST [ "id" ] ) $ id = $ POST [ "id" ] ;
i f ($ GET [ "id" ] ) $ id = $ GET [ "id" ] ;
i f ( $ id == ’all’ ) {$q = "SELECT * FROM tesi.coord WHERE 1 AND ip <> ’" .
$ SERVER[ ’REMOTE_ADDR’ ] . "’ GROUP BY userid ORDER
BY date DESC" ;
$ r e s u l t = mysql query ( $q , $ l i nk ) ;
i f ( i s r e s o u r c e ( $ r e s u l t ) && (mysql num rows( $ r e s u l t ) )
) {while ( $row = mysql fetch assoc ( $ r e s u l t ) ) {echo $row [ "userid" ] . "\t" ;
echo "geo:" . $row [ "lat" ] . "," . $row [ "long" ] . "#" ;
echo "\n" ;
}}}
. . .
?>
• il dispositivo richiede al server l’intera lista di utenti, che provvede a for-
nire tutte le relazioni ID/CoordinateGPS che possiede in quel momento.
<?php
. . .
else {$q = "SELECT * FROM tesi.coord WHERE userid = ’" . $ id .
"’ ORDER BY date DESC LIMIT 0, 1" ;
$ r e s u l t = mysql query ( $q , $ l i nk ) ;
i f ( i s r e s o u r c e ( $ r e s u l t ) && (mysql num rows( $ r e s u l t )
== 1) ) {
CAPITOLO 3. SVILUPPO DEL PROGETTO 34
$row = mysql fetch assoc ( $ r e s u l t ) ;
echo $row [ "userid" ] . "\t" ;
echo "geo:" . $row [ "lat" ] . "," . $row [ "long" ] . "#" ;
}}}?>
Conclusioni
Il lavoro svolto si e rivelato un interessante caso di studio su applicazioni
e tecnologie all’avanguardia, di immediato interesse in diversi campi. L’ap-
plicativo, nonostante sia stato presentato come un navigatore turistico, puo
essere adottato in molti altri ambiti, come ad esempio il controllo flotte (es.
autotrasporto), o, piu in generale, nel campo della sicurezza per il controllo
di elementi mobili.
La semplicita di utilizzo e di sviluppo, offerta dalla piattaforma Android,
ha permesso di creare lo strumento presentato, con un alto livello di affidabi-
lita e accesso, pur utilizzando risorse complesse come mappe e funzionalita di
geolocalizzazione. Inoltre, per ulteriori sviluppi, e prevista l’integrazione di
funzionalita avanzate, per le quali l’applicativo e predisposto (autenticazione
avanzata, gestione di gruppi indipendenti, voip e scambio dati).
35
Appendice A
Creazione dell’interfaccia
Al fine di poter sviluppare un sistema grafico per Google Android, prima di
iniziare a scrivere righe di codice, bisogna impostare alcune variabili necessarie
al software per poter sfruttare le risorse della piattaforma.
A.1 Android Manifest
AndroidManifest.xml e un file richiesto per qualsiasi applicazione. Si trova
nella cartella principale, e descrive le variabili globali del package, tutte le
componenti (activities, services, ecc..), nonche l’implementazione delle classi,
che tipo di dati gestiscono, e dove possono essere lanciati.
<?xml version="1.0" encoding="utf-8"?>
<mani fe s t xmlns :andro id="http://schemas.android.com/apk/res
/android"
package="com.android.demo.gpsAndroid" andro id :ver s ionCode=
"1"
android:vers ionName="1.0.0">
<uses−permis s ion android:name="android.permission.
READ_CONTACTS" />
<uses−permis s ion android:name="android.permission.
ACCESS_LOCATION" />
<uses−permis s ion android:name="android.permission.
ACCESS_GPS" />
<uses−permis s ion android:name="android.permission.
ACCESS_ASSISTED_GPS" />
36
APPENDICE A. CREAZIONE DELL’INTERFACCIA 37
<uses−permis s ion android:name="android.permission.
ACCESS_MOCK_LOCATION" />
<uses−permis s ion android:name="android.permission.
ACCESS_COARSE_LOCATION" />
<uses−permis s ion android:name="android.permission.
ACCESS_WIFI_STATE" />
<uses−permis s ion android:name="android.permission.
ACCESS_NETWORK_STATE" />
<uses−permis s ion android:name="android.permission.
ACCESS_FINE_LOCATION" />
<uses−permis s ion android:name="android.permission.INTERNET
" />
<app l i c a t i o n andro id : i c on="@drawable/icon" and r o i d : l a b e l="
@string/app_name">
<uses−l i b r a r y android:name="com.google.android.maps" />
<a c t i v i t y and r o i d : l a b e l="@string/app_name" android:name="
.GpsAndroid">
<in tent− f i l t e r>
<ac t i on android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.
LAUNCHER" />
</ intent− f i l t e r>
</ a c t i v i t y>
<a c t i v i t y android:name=".AndroidMap" />
</ app l i c a t i o n>
</ mani f e s t>
A.2 R.java
Il file R.java e un indice di tutte le risorse definite nel progetto. Viene usato
dal sistema come scorciatoia per l’accesso alle risorse incluse nei file. Viene
generato automaticamente da Eclipse, durante la programmazione.
/∗ AUTO−GENERATED FILE . DO NOT MODIFY.
∗∗ This c l a s s was a u t o m a t i c a l l y generated by the
APPENDICE A. CREAZIONE DELL’INTERFACCIA 38
∗ aapt t o o l from the resource data i t found . I t
∗ shou ld not be modi f ied by hand .
∗/
package com . android . demo . gpsAndroid ;
public f ina l class R {public stat ic f ina l class a t t r {}public stat ic f ina l class drawable {public stat ic f ina l int bubble=0x7f020000 ;
public stat ic f ina l int i con=0x7f020001 ;
public stat ic f ina l int marker=0x7f020002 ;
public stat ic f ina l int marker1=0x7f020003 ;
public stat ic f ina l int marker3=0x7f020004 ;
}public stat ic f ina l class id {public stat ic f ina l int conta ine r=0x7f050000 ;
public stat ic f ina l int mapview=0x7f050001 ;
public stat ic f ina l int t ext1=0x7f050003 ;
public stat ic f ina l int zoom holder=0x7f050002 ;
}public stat ic f ina l class l ayout {public stat ic f ina l int main=0x7f030000 ;
public stat ic f ina l int map=0x7f030001 ;
public stat ic f ina l int rows=0x7f030002
}public stat ic f ina l class s t r i n g {public stat ic f ina l int app name=0x7f040001 ;
public stat ic f ina l int h e l l o=0x7f040000 ;
public stat ic f ina l int show map=0x7f040002 ;
public stat ic f ina l int toggle map=0x7f040004 ;
public stat ic f ina l int vuoto=0x7f040003 ;
}
Appendice B
Android e Google Maps
B.1 AndroidMap
La classe AndroidMap si occupa della parte grafica del programma. Gestisce
l’attivita di tutto cio che riguarda la mappa, inclusa l’inizializzazione del
provider GPS, la creazione dei menu ed il recupero delle proprie coordinate.
package com . android . demo . gpsAndroid ;
import . . . .
public class AndroidMap extends MapActivity {// =================================================
// CLASSE INTERNA
// =================================================
/∗∗∗ Classe per l a g e s t i o n e d e i segnapos to da mettere s u l l a
mappa
∗/private class MapOverlay extends ItemizedOverlay<
OverlayItem> {. . . . . . .
}
/∗∗∗ L i s t e n e r che g e s t i s c e i l cambio d i c o o r d i n a t e GPS
39
APPENDICE B. ANDROID E GOOGLE MAPS 40
∗∗ @author Francesco
∗/private class MyLocationListener implements
Loca t i onL i s t ene r {. . . . . .
}
// ================================================
// v a r i a b i l i
// ================================================
private stat ic f ina l int TOGGLEMAP = 0 ;
private MapView mMapView ;
private View zoomView ;
public stat ic GeoPoint p ;
public stat ic GeoPoint myLoc = null ;
public St r ing coords ;
public Drawable defaultMarker ;
public ArrayList<GeoPoint> l i s t aGeoPo in t s ;
public ArrayList<Punto> l i s t aPun t i ;
private LocationManager lm ;
private Loca t i onL i s t ene r l o c a t i o nL i s t e n e r ;
public MapControl ler mc ;
public MapOverlay ol , myOl , netOl ;
// =================================================
// Metodi
// =================================================
/∗∗∗ Metodo per l a c r e a z i o n e d i Overlay d e l l a mappa a
p a r t i r e d a l l a l i s t a d i
∗ punt i g e o g r a f i c i
∗∗ @param l i s t a
∗/public void createMarks ( ArrayList<GeoPoint> l i s t a ) {
// Creo l ’ o v e r l a y
APPENDICE B. ANDROID E GOOGLE MAPS 41
o l = new MapOverlay ( defaultMarker ) ;
// Aggiungo i punt i d e l l a l i s t a p r e s i d a l l a r u b r i c a
o l . addItems ( l i s t a ) ;
o l . go ( ) ;
mMapView . getOver lays ( ) . add ( o l ) ;
}
/∗∗∗ Creo aggiungo un u l t e r i o r e Overlay se t ro vo punt i d a l l a
r e t e
∗/public void createMarksFromNet ( ) {
// Prendo i punt i
ArrayList<Utente> array = new HTTPSend( ) . ge tLocat i ons ( ) ;
mMapView . i n v a l i d a t e ( ) ;
// Aggiunge un Overlay
netOl . mItemList . c l e a r ( ) ;
try {for ( Utente utente : array ) {netOl . addItem ( utente . getCoordinate ( ) , utente . getNome ( ) )
;
}} catch ( Exception e ) {e . pr intStackTrace ( ) ;
}
// v a i
netOl . go ( ) ;
// Tog l i e q u e l l o v e c c h i o
i f (mMapView . getOver lays ( ) . conta in s ( netOl ) ) {mMapView . getOver lays ( ) . remove ( netOl ) ;
}// mette q u e l l o nuovo
mMapView . getOver lays ( ) . add ( netOl ) ;
APPENDICE B. ANDROID E GOOGLE MAPS 42
}
/∗∗∗ Metodo usato per c a r i c a r e i l punto c l i c c a t o , e t u t t i i
punt i d e l l a l i s t a
∗/public void getCoords ( ) {Bundle ex t ra s = ge t In t en t ( ) . getExtras ( ) ;
this . coords = ext ra s . g e tS t r i ng ("coords" ) ;
// punto c l i c c a t o n e l l a l i s t a
p = getPoint ( this . coords ) ;
// punt i d e l l a l i s t a
l i s t aGeoPo in t s = new ArrayList<GeoPoint >() ;
this . l i s t aPun t i = GpsAndroid . l i s t aPun t i ;
}
/∗∗∗ A p a r t i r e d a l l a s t r i n g a i n s e r i t a , que s to metodo
f o r n i s c e in output
∗ l ’ o g g e t t o GeoPoint c o r r i s p o n d e n t e .
∗∗ l a s t r i n g a in input deve e s s e r e n e l formato : ” geo : xx .
yyyyyy , xx . yyyyyy#”
∗∗ @param i n p u t S t r
∗ S t r i n g a d i input
∗ @return GeoPoint
∗/public stat ic GeoPoint getPoint ( CharSequence inputStr ) {f ina l St r ing geoPattern = "(geo
:[\\-]?[0-9]{1,3}\\.[0-9]{1,6}\\,
[\\-]?[0-9]{1,3}\\.[0-9]{1,6}\\#)" ;
// Compila and usa e s p r e s s i o n i r e g o l a r i
Pattern pattern = Pattern . compi le ( geoPattern ) ;
Matcher matcher = pattern . matcher ( inputStr ) ;
boolean matchFound = matcher . f i nd ( ) ;
APPENDICE B. ANDROID E GOOGLE MAPS 43
i f (matchFound ) {// Prendi per buona l a prima occorrenza
St r ing groupStr = matcher . group (0) ;
// Fai i l parse d e l l a Lat/Long
St r ing l a t i dud i n e = groupStr . sub s t r i ng ( groupStr . indexOf (
":" ) + 1 ,
groupStr . indexOf ("," ) ) ;
S t r ing l ong i t ud in e = groupStr . sub s t r i ng ( groupStr . indexOf
("," ) + 1 ,
groupStr . indexOf ("#" ) ) ;
Float l a t = Float . par seF loat ( l a t i dud i n e ) ;
Float l o n g i t = Float . par seF loat ( l ong i t ud in e ) ;
// Crea i l GeoPoint in base a Lat/Long
p = new GeoPoint ( ( int ) ( l a t ∗ 1000000) , ( int ) ( l o n g i t ∗1000000) ) ;
}return p ;
}
@Override
protected boolean i sRouteDisp layed ( ) {return fa l se ;
}
/∗∗∗ Conf iguraz ione d e l l a Mappa
∗/public void setupMap ( ) {
// Qualche impostaz ione per l a mappa
setContentView (R. layout .map) ;
mMapView = (MapView) findViewById (R. id . mapview ) ;
mMapView . s e tC l i c k ab l e ( true ) ;
mMapView . s e t S a t e l l i t e ( fa l se ) ;
mc = mMapView . g e tCon t r o l l e r ( ) ;
// Aggiunge i l c o n t r o l l o d e l l o zoom
LinearLayout zoom = ( LinearLayout ) findViewById (R. id .
zoom holder ) ;
APPENDICE B. ANDROID E GOOGLE MAPS 44
zoomView = mMapView . getZoomControls ( ) ;
zoomView . setLayoutParams (new ViewGroup . LayoutParams (
ViewGroup . LayoutParams .WRAPCONTENT,
ViewGroup . LayoutParams .WRAPCONTENT) ) ;
zoom . addView ( zoomView) ;
mMapView . displayZoomControls ( true ) ;
// l i v e l l o d i zoom
mc. setZoom (11) ;
// Creo i markers da v i s u a l i z z a r e s u l l a mappa
defaultMarker = getResources ( ) . getDrawable (R. drawable .
marker ) ;
de faultMarker . setBounds (0 , 0 , de faultMarker .
g e t In t r in s i cWidth ( ) ,
de faultMarker . g e t I n t r i n s i cH e i g h t ( ) ) ;
// Creo g l i o v e r l a y per l a mia p o s i z i o n e e q u e l l a d e g l i
a l t r i
myOl = new MapOverlay ( defaultMarker ) ;
netOl = new MapOverlay ( defaultMarker ) ;
}
public void i n i t i a l i z eGPS ( ) {// uso LocationManager per o t t e n e r e l a p o s i z i o n e GPS
lm = ( LocationManager ) getSystemServ ice ( Context .
LOCATION SERVICE) ;
l o c a t i o nL i s t e n e r = new MyLocationListener ( ) ;
lm . requestLocat ionUpdates ( LocationManager .GPS PROVIDER,
0 , 0 ,
l o c a t i o nL i s t e n e r ) ;
}
public stat ic St r ing getMyId ( ) {// E ’ un emulatore , q u i n d i passo a mano i l mio i n d i r i z z o
/∗ re turn java . net . InetAddress . ge tLoca lHos t ( ) .
getHostAddress ( ) ; ∗/
APPENDICE B. ANDROID E GOOGLE MAPS 45
return "Francesco" ;
}
@Override
public void onCreate ( Bundle savedIns tanceState ) {super . onCreate ( savedIns tanceState ) ;
// S e t t a g g i per l ’ i n i z i a l i z z a z i o n e d e l l a mappa
setupMap ( ) ;
// I n i z i a l i z z o i l p r o v i d e r GPS
i n i t i a l i z eGPS ( ) ;
// Imposto t u t t e l e c o o r d i n a t e d i cu i ho b i sogno
getCoords ( ) ;
// Creo i marks da a p p l i c a r e s u l l a l i s t a
createMarks ( this . l i s t aGeoPo in t s ) ;
Toast . makeText ( this , getMyId ( ) , Toast .LENGTH SHORT) . show
( ) ;
try {mc. animateTo (p) ;
} catch ( Nul lPo interExcept ion e ) {Toast . makeText ( this , "Errore nel punto selezionato" ,
Toast .LENGTH SHORT) . show ( ) ;
}
// Crea i marks p rend end o l i d a l l a r e t e
Thread crea = new Thread ( ) {public void run ( ) {try {while ( true ) {Thread . s l e e p (1000) ;
showAdressResults . sendEmptyMessage (0 ) ;
}
} catch ( Inter ruptedExcept ion e ) {e . pr intStackTrace ( ) ;
APPENDICE B. ANDROID E GOOGLE MAPS 46
}}} ;c r ea . s t a r t ( ) ;
}
/∗∗∗ Handler che chiama l a fun z io ne che prende i punt i d a l l a
r e t e
∗/private Handler showAdressResults = new Handler ( ) {@Override
public void handleMessage ( Message msg) {createMarksFromNet ( ) ;
}} ;
public boolean onCreateOptionsMenu (Menu menu) {super . onCreateOptionsMenu (menu) ;
menu . add (0 , TOGGLE MAP, 0 , R. s t r i n g . toggle map ) ;
return true ;
}
public boolean onMenuItemSelected ( int f e a tu re Id , MenuItem
item ) {switch ( item . getItemId ( ) ) {case TOGGLEMAP:
i f ( this .mMapView . i s S a t e l l i t e ( ) )
this .mMapView . s e t S a t e l l i t e ( fa l se ) ;
else
this .mMapView . s e t S a t e l l i t e ( true ) ;
return true ;
}return super . onMenuItemSelected ( f ea ture Id , item ) ;
}}
APPENDICE B. ANDROID E GOOGLE MAPS 47
B.2 MapOverlay
La classe MapOverlay e una classe interna a AndroidMap, e cura la gestione
dei layer. In particolare si occupa della creazione di overlay per la stampa dei
punti sulla mappa, in base alle coordinate degli utenti.
private class MapOverlay extends ItemizedOverlay<
OverlayItem> {// ========================================
// v a r i a b i l i c l a s s e i n t e r n a
// ========================================
private ArrayList<OverlayItem> mItemList = new ArrayList<
OverlayItem >() ;
// ========================================
// metodi c l a s s e i n t e r n a
// ========================================
/∗∗∗ Contrut tore
∗/public MapOverlay ( Drawable pMarker ) {super ( pMarker ) ;
mItemList . c l e a r ( ) ;
}
/∗∗∗ Aggiunge i marker in base a i punt i d e l l a l i s t a
∗∗ @param l i s t a
∗/public void addItems ( ArrayList<GeoPoint> l i s t a ) {
// Qui aggiungo i marker
int i = 0 ;
for ( GeoPoint po int : l i s t a ) {mItemList . add ( i++, new OverlayItem ( point , po int . t oS t r i ng
( ) ,
APPENDICE B. ANDROID E GOOGLE MAPS 48
po int . t oS t r i ng ( ) ) ) ;
}}
public void addItems ( ArrayList<GeoPoint> l i s t a , ArrayList<
Str ing> myIds ) {// Qui aggiungo i marker
int i = 0 ;
for ( GeoPoint po int : l i s t a ) {mItemList . add ( i++, new OverlayItem ( point , myIds . get ( i ) ,
po int
. t oS t r i ng ( ) ) ) ;
}}
public void addItem ( GeoPoint punto ) {mItemList . add (new OverlayItem ( punto , punto . t oS t r i ng ( ) ,
punto
. t oS t r i ng ( )
+ "1" ) ) ;
}
public void addItem ( GeoPoint punto , S t r ing myId) {mItemList . add (new OverlayItem ( punto , myId , punto . t oS t r i ng
( ) ) ) ;
}
@Override
protected OverlayItem create I tem ( int pIndex ) {return mItemList . get ( pIndex ) ;
}
@Override
public void draw (Canvas canvas , MapView mapView , boolean
shadow ) {// I n i z i a l i z z o i l Paint
Paint pa int = new Paint ( ) ;
pa int . s e tTextS i z e (14) ;
pa int . s e tF i l t e rB i tmap ( true ) ;
APPENDICE B. ANDROID E GOOGLE MAPS 49
pa int . s e tAnt iA l i a s ( true ) ;
// Setup a c o l o r f o r our l o c a t i o n
pa int . s e t S t y l e ( S ty l e .FILL AND STROKE) ;
pa int . setARGB(255 , 255 , 255 , 255) ; // Nice s t r o n g Android
−Green
Paint pa int2 = new Paint ( ) ;
pa int2 . setARGB(150 , 100 , 100 , 100) ;
Point c = new Point ( ) ;
for ( OverlayItem p : mItemList ) {GeoPoint punto = p . getPoint ( ) ;
mapView . g e tP ro j e c t i on ( ) . t oP i x e l s ( punto , c ) ;
RectF f = new RectF ( c . x − ( (11 ∗ p . g e tT i t l e ( ) . l ength ( ) )
/ 2) ,
c . y − 50 , c . x + ((11 ∗ p . g e tT i t l e ( ) . l ength ( ) ) / 2) ,
c . y − 30) ;
canvas . drawRect ( f , pa int2 ) ;
// Draw our name
canvas . drawText (p . g e tT i t l e ( ) , c . x
− ( (7 ∗ p . g e tT i t l e ( ) . l ength ( ) ) / 2) , c . y − 35 , pa int ) ;
}
super . draw ( canvas , mapView , shadow ) ;
MapOverlay . boundCenterBottom ( defaultMarker ) ;
}
/∗∗∗ Metodo per a p p l i c a r e l e a g g i u n t e d i marker a l l a c l a s s e
∗/public void go ( ) {populate ( ) ;
}
/∗∗
APPENDICE B. ANDROID E GOOGLE MAPS 50
∗ Questo metodo v iene chiamato quando s i c l i c c a su un
marker , e mostra
∗ l e i n f o r m a z i o n i d e l punto c l i c c a t o ( via , cap e c i t t a )
∗/@Override
protected boolean onTap( int pIndex ) {
Geocoder g = new Geocoder (AndroidMap . this , Loca le . ITALY) ;
try {GeoPoint punto = mItemList . get ( pIndex ) . getPoint ( ) ;
Address l o c a t = g . getFromLocation (
(double ) punto . getLat itudeE6 ( ) / 1000000 ,
(double ) punto . getLongitudeE6 ( ) / 1000000 , 1) . get (0 ) ;
double l a t = Double . valueOf ( mItemList . get ( pIndex ) .
getSn ippet ( )
. s p l i t ("," ) [ 0 ] ) / 1000000;
double l on = Double . valueOf ( mItemList . get ( pIndex ) .
getSn ippet ( )
. s p l i t ("," ) [ 1 ] ) / 1000000;
Toast . makeText (
AndroidMap . this ,
mItemList . get ( pIndex ) . g e tT i t l e ( ) + "\n"
+ lo c a t . getAddressLine (0 ) + " - "
+ lo c a t . getAddressLine (1 ) + "\n" + "("
+ l a t + " , " + lon + ")" ,
Toast .LENGTH SHORT) . show ( ) ;
} catch ( Exception e ) {
Toast . makeText (AndroidMap . this , "Non trovato!" ,
Toast .LENGTH SHORT) ;
}
return true ;
}
APPENDICE B. ANDROID E GOOGLE MAPS 51
@Override
public int s i z e ( ) {return mItemList . s i z e ( ) ;
}}
B.3 MyLocationListener
E’ l’implementazione dell’interfaccia LocationListener. Viene usata per ri-
cevere notifiche dal gestore della locazione (LocationManager) ogni volta
che c’e una modifica della propria posizione. I metodi di questa classe sono
chiamati se il Listener e stato registrato dal gestore del GPS, attraverso il
metodo requestLocationUpdates(...)
private class MyLocationListener implements
Loca t i onL i s t ene r {/∗∗ Ogni v o l t a che cambia l a mia p o s i z i o n e , agg iorno i l
punto s u l l a
∗ mappa , e comunico l a mia p o s i z i o n e a l s e r v e r
∗/public void onLocationChanged ( Locat ion l o c ) {i f ( l o c != null ) {// Prendo i l punto in cu i mi t rov o
myLoc = new GeoPoint ( ( int ) ( l o c . ge tLat i tude ( ) ∗ 1E6) ,
( int ) ( l o c . getLongitude ( ) ∗ 1E6) ) ;
mMapView . i n v a l i d a t e ( ) ;
// Aggiunge l ’ o v e r l a y per l a mia p o s i z i o n e
myOl . mItemList . c l e a r ( ) ;
myOl . addItem (myLoc , AndroidMap . getMyId ( ) ) ;
myOl . go ( ) ;
// Tog l i e l ’ u l t imo o v e r l a y s
i f (mMapView . getOver lays ( ) . conta in s (myOl) ) {
APPENDICE B. ANDROID E GOOGLE MAPS 52
mMapView . getOver lays ( ) . remove (myOl) ;
}
// . . . e aggiungo q u e l l o nuovo
mMapView . getOver lays ( ) . add (myOl) ;
// Comunico l a mia p o s i z i o n e a l s e r v e r
new HTTPSend( ) . send (AndroidMap . getMyId ( ) , myLoc) ;
}}
@Override
public void onProviderDisabled ( S t r ing prov ide r ) {}
@Override
public void onProviderEnabled ( St r ing prov ide r ) {}
@Override
public void onStatusChanged ( St r ing provider , int s tatus ,
Bundle ex t ra s ) {}}
Appendice C
Altre classi di utilita
C.1 HTTPSend
Classe che gestisce la comunicazione con il server. Viene chiamata dal Lo-
cationListener, cioe ogni volta che varia la propria posizione, e la invia al
server, mantenendone cosı aggiornate le coppie ID/Coordinate. Inoltre pren-
de dal server le posizioni degli altri utenti attualmente presenti nel sistema,
permettendone la stampa sulla mappa.
package com . android . demo . gpsAndroid ;
import . . .
public class HTTPSend {Defau l tHttpCl i ent h t t p c l i e n t ;
HttpResponse response ;
public HTTPSend( ) {h t t p c l i e n t = new Defau l tHttpCl i ent ( ) ;
}
public void send ( St r ing myId , GeoPoint p) {// Toast . makeText ( AndroidMap . t h i s , p . t o S t r i n g ( ) ,
// Toast .LENGTH SHORT) . show () ;
HttpPost ht tpos t = new HttpPost (
"http://www.ac.infn.it/seraf/tesi/putcoords.php" ) ;
53
APPENDICE C. ALTRE CLASSI DI UTILITA 54
double l a t i t u d i n e = (double ) p . getLat itudeE6 ( ) / 1000000;
double l o ng i t ud in e = (double ) p . getLongitudeE6 ( ) /
1000000;
L i s t<NameValuePair> nvps = new ArrayList<NameValuePair >()
;
nvps . add (new BasicNameValuePair ("latitudine" , "" +
l a t i t u d i n e ) ) ;
nvps . add (new BasicNameValuePair ("longitudine" , "" +
long i tud in e ) ) ;
nvps . add (new BasicNameValuePair ("myId" , myId) ) ;
try {httpos t . s e tEnt i ty (new UrlEncodedFormEntity ( nvps , HTTP.
UTF 8) ) ;
// Post , check and show the r e s u l t ( not r e a l l y
s p e c t a c u l a r , but
// works ) :
re sponse = h t t p c l i e n t . execute ( ht tpos t ) ;
} catch ( Exception e ) {Log . e ("httpPost" , e . getMessage ( ) ) ;
e . pr intStackTrace ( ) ;
}}
public GeoPoint getLocat ion ( int id ) {
URL myFileUrl = null ;
try {myFileUrl = new URL(
"http://www.ac.infn.it/seraf/tesi/getpath.php?id=" +
id ) ;
} catch ( MalformedURLException e ) {e . pr intStackTrace ( ) ;
}try {HttpURLConnection conn = (HttpURLConnection ) myFileUrl
. openConnection ( ) ;
conn . setDoInput ( true ) ;
APPENDICE C. ALTRE CLASSI DI UTILITA 55
conn . connect ( ) ;
InputStream i s = conn . getInputStream ( ) ;
BufferedInputStream b i s = new BufferedInputStream ( i s ) ;
/∗∗ Read b y t e s to the Buf fer u n t i l t h e r e i s noth ing more
to read (−1) .
∗/ByteArrayBuffer baf = new ByteArrayBuffer (50) ;
int cur rent = 0 ;
while ( ( cur r ent = b i s . read ( ) ) != −1) {baf . append ( (byte ) cur r ent ) ;
}
/∗ Convert the Bytes read to a S t r i n g . ∗/St r ing t e s t o = new St r ing ( baf . toByteArray ( ) ) ;
return AndroidMap . getPoint ( t e s t o ) ;
} catch ( IOException e ) {e . pr intStackTrace ( ) ;
}
return null ;
}
public ArrayList<Utente> ge tLocat i ons ( ) {ArrayList<Utente> array = new ArrayList<Utente >() ;
URL myFileUrl = null ;
try {myFileUrl = new URL(
"http://www.ac.infn.it/seraf/tesi/getpath.php?id=all" )
;
} catch ( MalformedURLException e ) {e . pr intStackTrace ( ) ;
}try {HttpURLConnection conn = (HttpURLConnection ) myFileUrl
. openConnection ( ) ;
conn . setDoInput ( true ) ;
conn . connect ( ) ;
APPENDICE C. ALTRE CLASSI DI UTILITA 56
InputStream i s = conn . getInputStream ( ) ;
BufferedInputStream b i s = new BufferedInputStream ( i s ) ;
/∗∗ Read b y t e s to the Buf fer u n t i l t h e r e i s noth ing more
to read (−1) .
∗/ByteArrayBuffer baf = new ByteArrayBuffer (50) ;
int cur rent = 0 ;
while ( ( cur r ent = b i s . read ( ) ) != −1) {baf . append ( (byte ) cur r ent ) ;
}
/∗ Convert the Bytes read to a S t r i n g . ∗/St r ing t e s t o = new St r ing ( baf . toByteArray ( ) ) ;
S t r ing [ ] tokens = t e s t o . s p l i t ("\n" ) ;
for ( S t r ing k : tokens ) {St r ing [ ] a = k . s p l i t ("\t" ) ;
array . add (new Utente (AndroidMap . getPoint ( a [ 1 ] ) , a [ 0 ] ) ) ;
}return array ;
} catch ( Exception e ) {e . pr intStackTrace ( ) ;
}
return null ;
}}
C.2 Punto
Semplice classe che serve a contenere informazioni sul punto in cui si trova
ogni utente presente nel sistema, come il suo nome e le sue coordinate.
package com . android . demo . gpsAndroid ;
APPENDICE C. ALTRE CLASSI DI UTILITA 57
/∗∗∗ Classe che deve contenere i n f o r m a z i o n i r e l a t i v e a l punto
che verr a po i
∗ stampato s u l l a mappa
∗∗ @author Francesco
∗/public class Punto {private St r ing id , nome , coords ;
/∗∗∗ C o s t r u t t o r e
∗/public Punto ( St r ing id , S t r ing nome , S t r ing coords ) {this . id = id ;
this . nome = nome ;
this . coords = coords ;
}
public St r ing getCoords ( ) {return coords ;
}
public St r ing get Id ( ) {return id ;
}
public St r ing getNome ( ) {return nome ;
}}
C.3 Utente
L’unico scopo di questa classe e, una volta istanziata in un oggetto, di avere
una lista di Utenti da poter gestire, e stamparne la posizione sulla mappa,
partendo dalle coordinate.
APPENDICE C. ALTRE CLASSI DI UTILITA 58
package com . android . demo . gpsAndroid ;
import com . goog l e . android . maps . GeoPoint ;
public class Utente {GeoPoint coord inate ;
S t r ing nome = new St r ing ( ) ;
public Utente ( GeoPoint p , S t r ing n) {this . c oo rd ina te = p ;
this . nome = n ;
}
public GeoPoint getCoordinate ( ) {return coord inate ;
}
public St r ing getNome ( ) {return nome ;
}}
Bibliografia
Bibliografia
[1] J. Rosenberg et al. STUN - Simple Traversal of User Datagram Protocol
(UDP) Through Network Address Translators (NATs) . IETF RFC 3489,
marzo 2003.
[2] T. Imielinski et al. GPS-Based Addressing and Routing. IETF RFC 2009,
novembre 1996.
[3] J. Arkko et al. Internet Protocol Version 6 (IPv6) for Some Second and
Third Generation Cellular Hosts. IETF RFC 3316, aprile 2003
[4] P. Srisuresh et al. State of Peer-to-Peer (P2P) Communication across
Network Address Translators (NATs) IETF RFC 5128, marzo 2008.
Riferimenti
[5] General Packet Radio Service, Wikipedia,
http://it.wikipedia.org/wiki/GPRS
[6] Universal Mobile Telecommunications System, Wikipedia,
http://it.wikipedia.org/wiki/Umts
[7] Sistema informativo territoriale, Wikipedia,
http://it.wikipedia.org/wiki/Sistema informativo territoriale
[8] Peer to Peer, Wikipedia, http://it.wikipedia.org/wiki/P2p
59