Sviluppare applicazioni geolocalizzate per iPhone

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Sviluppare applicazioni geolocalizzate per iPhone - Presentation Transcript

    1. 24 Ottobre 2009 Italians iPhone Developers meeting @ VeneziaCamp2009 Eduard Roccatello <eduard@roccatello.it>
    2.  GIS e Geolocalizzazione  CoreLocation Framework  MapKit Framework  Use case: ReLocate  Discussione 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 2
    3.  GIS - Geographic Information System  Software che lavora con il territorio; più esattamente con l’informazione territoriale.  Consumer  Google Maps  Microsoft Live Search Maps  ViaMichelin  Yahoo! Maps 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 3
    4.  Business  Free & opensource software ▪ Molti software di alta qualità, aderenti agli standard emanati da Open Geospatial Consortium (OGC).  Commerciale ▪ Autodesk ▪ ESRI ▪ Bentley 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 4
    5.  Cos’è cambiato?  Banda larga  Ampia diffusione di dispositivi mobile  La maggior parte delle applicazioni tradizionali sono state riviste.  E se sfruttassimo la posizione geografica per fornire nuove potenzialità? 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 5
    6.  Associare ad un documento multimediale una coppia di coordinate geografiche.  Diffusa sul web per la condivisione di fotografie e video.  Ma anche per eventi, strutture, punti di interesse...  Qualsiasi elemento che possa essere georeferenziato. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 6
    7.  HTML 5 offre supporto alla geolocalizzazione.  Browser che supportano la geolocalizzazione:  Mozilla Firefox 3.5  Apple Mobile Safari  Due modalità  Utilizzo di un ricevitore GPS  Database di geolocalizzazione tramite IP.  Accuratezza  Houston we have a problem... Da 10 m del caso ottimo a circa 50 km nei casi peggiori. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 7
    8. // controllo del supporto if (navigator.geolocation){ navigator.geolocation .getCurrentPosition(onSuccess, onError); } // stub per gestione errore function onError(message) {} function onSuccess(position) { // debug con firebug ;) console.dir(position); var s = "LAT: " + position.coords.latitude + "LON: " + position.coords.longitude; alert(s); } 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 8
    9. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 9
    10.  Assisted GPS (A-GPS)  Ottimo perchè consente un fixing veloce.  Combina la triangolazione cellulare (LBS – Location Base Service) con le informazioni relative alla posizione dei satelliti. ▪ Al fine di ottenere il segnale GPS velocemente.  Migliore accuratezza rispetto al GPS tradizionale ▪ Fino a 10 metri contro i 30 classici.  Limitazioni ▪ Nessun accesso alle stringhe NMEA. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 10
    11.  Bussola magnetica - Magnometer  Consente di ottenere la direzione sui tre assi xyz senza doversi spostare ed affidarsi al poco accurato GPS.  Limitazioni ma anche applicazioni  ▪ Soggetta a false letture dovute a campi magnetici esterni. ▪ Potreste volerlo utilizzare per trovare i fili elettrici nel muro :-P 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 11
    12.  Dispositivi di localizzazione  Core Location Framework ▪ I dispositivi sono condivisi tra tutte le applicazioni e OS X mobile. ▪ Non è possibile accedere direttamente ai dispositivi.  Gestire la mappa  MapKit Framework ▪ Supporto nativo alla mappa di Google. ▪ Solo con iPhone Firmware 3.0 e successivi. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 12
    13.  Framework alla base di iPhone OS.  Introdotto con iPhone OS 2.0  Può utilizzare la triangolazione cellulare, GPS e WiFi (non in Italia).  Consente di trovare la posizione, l’orientamento e la velocità di spostamento del dispositivo. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 13
    14.  Core Location è basato su eventi.  Alla disponibilità di una nuova localizzazione iPhone attiverà un evento.  Per poter utilizzare Core Location, le applicazioni devono essere configurate per ricevere questi eventi. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 14
    15.  Requisiti di base  Creare un’istanza della classe CLLocationManager  Assegnare un delegato alla classe che implementi il protocollo CLLocationManagerDelegate ▪ Questa istanza intercetta gli eventi ▪ Si occupa di fatto di aggiornare tutti gli aspetti relativi alla geolocalizzazione. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 15
    16.  Aprite Xcode 3.2  Create un nuovo progetto  View-Based project  Chiamatelo VeniceCamp  Aggiungete il framework CoreLocation  Add > Existing framework... ▪ CoreLocation.framework 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 16
    17.  Aggiungete gli header di CoreLocation.  Per ogni classe... O meglio usando VeniceCamp_Prefix.pch  Dentro Other Sources #ifdef __OBJC__ #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #endif 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 17
    18.  Aggiungete una nuova classe  Cliccate su Classes  Add > New file...  Iphone OS ▪ Cocoa Touch Class ▪ Objective-C class ▪ Subclass of NSObject  Chiamatela FirstCLController.m ▪ Create anche il file .h 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 18
    19.  E’ il delegato per la gestione degli eventi  Deve implementare CLLocationManagerDelegate  Eventi di posizione – locationManager:didUpdateToLocation:fromLocation: – locationManager:didFailWithError:  Eventi di orientamento (opzionali – a meno di usare la bussola) – locationManager:didUpdateHeading: – locationManagerShouldDisplayHeadingCalibration: 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 19
    20. @interface FirstCLController : NSObject <CLLocationManagerDelegate> { CLLocationManager *locationManager; } @property (nonatomic, retain) CLLocationManager *locationManager; - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation; - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error; @end 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 20
    21.  Dichiara la classe come aderente al protocollo CLLocationManagerDelegate  Contiene un’istanza della classe CLLocationManager, che viene esposta tramite l’uso delle proprietà.  Dichiara solo i metodi per la location. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 21
    22. @implementation FirstCLController @synthesize locationManager; - (id) init { self = [super init]; if (self != nil) { self.locationManager = [[[CLLocationManager alloc] init] autorelease]; self.locationManager.delegate = self; } return self; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSLog(@"Location: %@", [newLocation description]); } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"Error: %@", [error description]); } - (void)dealloc { [self.locationManager release]; [super dealloc]; } @end 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 22
    23.  Init crea l’istanza e inizializza una nuova instanza di CLLocationManager.  Viene associata l’istanza della classe come delegato dell’istanza del location manager.  I metodi del protocollo rispondono agli eventi scrivendo dei messaggi nel log, utilizzando la funzione NSLog. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 23
    24.  Definito il controller aggiungiamolo al nostro ViewController preesistente.  Aprite VeniceCampViewController.h e aggiungete le righe evidenziate. @class FirstCLController @interface VeniceCampViewController : UIViewController { FirstCLController *locationController; } @property (nonatomic, retain) FirstCLController *locationController; @end 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 24
    25.  Aprite ora VeniceCampViewController.m  In testa aggiungete #import “FirstCLController.h” @implementation ... @synthesize locationController;  Implementate i metodi seguenti - (void) viewDidLoad { [super viewDidLoad]; locationController = [[MyCLController alloc] init]; [locationController.locationManager startUpdatingLocation]; } - (void) dealloc { [locationController release]; [super dealloc]; } 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 25
    26.  Caricata la vista, il metodo viewDidLoad inizializza il controller creato in precedenza ed avvia il location manager con il metodo startUpdatingLocation.  A questo punto possiamo provare l’applicazione.  Compilate ed eseguite dal menu Build > Build and Run.  Visualizzate la console dal menu Run > Console. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 26
    27.  Mantenere logica e visualizzazione separati è fondamentale per assicurare una qualità migliore.  Come passare i dati quindi dal controller per CoreLocation alla vista?  Utilizzamo un protocollo e lo strumento dei delegati. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 27
    28.  Aprite FirstCLController.h  Creiamo il protocollo LocatorDelegate dopo le righe di importazione @protocol LocatorDelegate @required - (void) locationUpdate: (CLLocation *)location; - (void) locationError: (NSString *)error; @end 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 28
    29.  Aggiungete una nuova variabile nell’interfaccia:  id delegate;  Create la proprietà:  @property (nonatomic, assign) id<LocatorDelegate> delegate;  Modificate la dichiarazione di VeniceCampViewController.h in  @interface VeniceCampViewController : UIViewController <LocatorDelegate> 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 29
    30.  Per prima cosa aggiungete in testa  @synthesize delegate;  Aprite FirstCLController.m e aggiungete dopo le righe di logging dei metodi didUpdateToLocation e didFailWithError rispettivamente:  [self.delegate locationUpdate:newLocation];  [self.delegate locationError: [error description]]; 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 30
    31.  Aggiungete una nuova variabile per contenere una label come segue in VeniceCampViewController.h  IBOutlet UILabel *locationLabel;  Aprite l’interface builder facendo doppio click sullo xib VeniceCampViewController, in Resources.  Aggiungete una label e collegatela al File’s Owner. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 31
    32.  Entrambi i metodi del protocollo sono obbligatori. - (void) locationUpdate:(CLLocation *)location{ [locationLabel setText:[location description]]; } - (void) locationError:(NSString *)error{ [locationLabel setText:error]; } 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 32
    33.  A questo punto è necessario aggiungere il delegato al controller di Core Location.  Questo avviene nel metodo viewDidLoad  locationController.delegate = self;  A questo punto la comunicazione tra controller e vista è impostata e funzionante. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 33
    34.  Proprietà  BOOL locationServicesEnabled ▪ Indica se nel dispositivo sono abilitati i servizi di localizzazione.  CLLocation *location ▪ L’ultima location ricevuta  CLLocationDistance distanceFilter ▪ Distanza dall’ultima posizione dopo la quale essere notificati degli eventi ▪ kCLDistanceFilterNone per tutti gli eventi 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 34
    35.  Proprietà  CLLocationAccuracy desiredAccuracy  Indica l’accuretezza desiderata. Possibili valori: ▪ kCLLocationAccuracyBest; (default) ▪ kCLLocationAccuracyNearestTenMeters; ▪ kCLLocationAccuracyHundredMeters; ▪ kCLLocationAccuracyKilometer; ▪ kCLLocationAccuracyThreeKilometers;  BOOL headingAvailable ▪ Indica se la bussola è disponibile nel dispositivo  CLLocationDegrees headingFilter ▪ Gradi di tolleranza per far scattare le notifiche di orientamento. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 35
    36.  Con l’introduzione di iPhone OS 3.0 è disponibile un nuovo framework per la gestione della mappa.  Possiamo utilizzarlo per visualizzare la posizione sulla mappa.  Aggiungiamo il framework MapKit.framework e l’import #import <MapKit/MapKit.h> 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 36
    37.  Aggiungete una nuova proprietà IBOutlet a VeniceCampViewController.h  MKMapView *mapView;  @property (nonatomic, retain) IBOutlet MKMapView *mapView;  Dall’Interface Builder aggiungete una mappa e associatela al File’s Owner. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 37
    38.  Aprite VeniceCampViewController.m  Nel metodo locationUpdate ora dobbiamo aggiornare la mappa.  Si vuole ottenere lo zoom alla regione interessata. MKCoordinateRegion region; MkCoordinateSpan span; span.longitudeDelta = 0.05; span.latitudeDelta = 0.05; region.center = [location coordinate]; region.span = span; [mapView setRegion:region animated:TRUE]; 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 38
    39.  Basta abilitare il flag showsUserLocation a TRUE.  Possiamo anche utilizzare l’interface builder, spuntando la scelta nelle proprietà.  Ricompilate, riavviate ed ecco uno splendido puntino blu!  24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 39
    40.  Posso utilizzare la annotation per visualizzare elementi accessori sulla mappa.  Pushpin  Descrizioni  Posso disegnare polilinee e poligoni ma devo utilizzare degli hack.  Alternative? Route-me library! 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 40
    41. 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 41
    42. Dubbi, domande? 24 Ottobre 2009 Eduard Roccatello @ Italian iPhone Developer Meeting 42

    + Eduard RoccatelloEduard Roccatello, 1 month ago

    custom

    275 views, 0 favs, 1 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 275
      • 264 on SlideShare
      • 11 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 3
    Most viewed embeds
    • 11 views on http://www.roccatello.it

    more

    All embeds
    • 11 views on http://www.roccatello.it

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories