ݺߣ

ݺߣShare a Scribd company logo
24 Ottobre 2009
Italians iPhone Developers meeting @ VeneziaCamp2009

Eduard Roccatello <eduard@roccatello.it>
?    GIS e Geolocalizzazione
?    CoreLocation Framework
?    MapKit Framework
?    Use case: ReLocate
?    Discussione




24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   2
?    GIS - Geographic Information System
     ? Software che lavora con il territorio; pi
         esattamente con linformazione territoriale.

?    Consumer
     ? Google Maps
     ? Microsoft Live Search Maps
     ? ViaMichelin
     ? Yahoo! Maps
24 Ottobre 2009    Eduard Roccatello @ Italian iPhone Developer Meeting   3
?    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
?    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
?    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
?    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
// 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
24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   9
?    Assisted GPS (A-GPS)
     ? Ottimo perch consente un fixing veloce.
     ? Combina la triangolazione cellulare (LBS C 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
?    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
?    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
?    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,
     lorientamento e la velocit di spostamento
     del dispositivo.

24 Ottobre 2009     Eduard Roccatello @ Italian iPhone Developer Meeting   13
?    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
?    Requisiti di base
     ? Creare unistanza 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
?    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
?    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
?    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
?    E il delegato per la gestione degli eventi
     ? Deve implementare CLLocationManagerDelegate

?    Eventi di posizione
C locationManager:didUpdateToLocation:fromLocation:
C locationManager:didFailWithError:

?    Eventi di orientamento (opzionali C a meno di usare
     la bussola)
C locationManager:didUpdateHeading:
C locationManagerShouldDisplayHeadingCalibration:
24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   19
@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
?    Dichiara la classe come aderente al protocollo
     CLLocationManagerDelegate

?    Contiene unistanza della classe
     CLLocationManager, che viene esposta
     tramite luso delle propriet.

?    Dichiara solo i metodi per la location.

24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   21
@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
?    Init crea listanza e inizializza una nuova
     instanza di CLLocationManager.
     ? Viene associata listanza della classe come
         delegato dellistanza 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
?    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
?    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
?    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
     lapplicazione.
     ? 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
?    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
?    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
?    Aggiungete una nuova variabile nellinterfaccia:
     ? 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
?    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
?    Aggiungete una nuova variabile per contenere
     una label come segue in
     VeniceCampViewController.h
     ? IBOutlet UILabel *locationLabel;


?    Aprite linterface builder facendo doppio click
     sullo xib VeniceCampViewController, in
     Resources.

?    Aggiungete una label e collegatela al Files
     Owner.
24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   31
?    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
?    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
?    Propriet
     ? BOOL locationServicesEnabled
       ? Indica se nel dispositivo sono abilitati i servizi di
         localizzazione.
     ? CLLocation *location
       ? Lultima location ricevuta
     ? CLLocationDistance distanceFilter
       ? Distanza dallultima posizione dopo la quale essere
         notificati degli eventi
       ? kCLDistanceFilterNone per tutti gli eventi
24 Ottobre 2009     Eduard Roccatello @ Italian iPhone Developer Meeting   34
?    Propriet
     ? CLLocationAccuracy desiredAccuracy
     ? Indica laccuretezza 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
?    Con lintroduzione 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 limport #import <MapKit/MapKit.h>
24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   36
?    Aggiungete una nuova propriet IBOutlet a
     VeniceCampViewController.h
     ? MKMapView *mapView;
     ? @property (nonatomic, retain)
                          IBOutlet MKMapView *mapView;


?    DallInterface Builder aggiungete una mappa
     e associatela al Files Owner.


24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   37
?    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
?    Basta abilitare il flag showsUserLocation a
     TRUE.

?    Possiamo anche utilizzare linterface builder,
     spuntando la scelta nelle propriet.

?    Ricompilate, riavviate ed ecco uno splendido
     puntino blu! ?

24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   39
?    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
24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   41
Dubbi, domande?




24 Ottobre 2009   Eduard Roccatello @ Italian iPhone Developer Meeting   42

More Related Content

Viewers also liked (16)

Web Browser
Web BrowserWeb Browser
Web Browser
Eduard Roccatello
?
Google Hacking
Google HackingGoogle Hacking
Google Hacking
Eduard Roccatello
?
Progettare un (Web)GIS utilizzando Software Libero
Progettare un (Web)GIS utilizzando Software LiberoProgettare un (Web)GIS utilizzando Software Libero
Progettare un (Web)GIS utilizzando Software Libero
Eduard Roccatello
?
Similarities&Differences2
Similarities&Differences2Similarities&Differences2
Similarities&Differences2
donnettefernandez
?
The Power Of Story shared
The Power Of Story sharedThe Power Of Story shared
The Power Of Story shared
Eddy Moratin
?
Welcome to Proto.in January Edition '08
Welcome to Proto.in January Edition '08Welcome to Proto.in January Edition '08
Welcome to Proto.in January Edition '08
vijay.proto
?
Taiwan:Island (team6)
Taiwan:Island (team6)Taiwan:Island (team6)
Taiwan:Island (team6)
asuka
?
Definitieve Pp
Definitieve PpDefinitieve Pp
Definitieve Pp
anne88
?
Competenties
CompetentiesCompetenties
Competenties
anne88
?
WomenS Beauty Bodies
WomenS Beauty BodiesWomenS Beauty Bodies
WomenS Beauty Bodies
safdar
?
Recognition&Rewards
Recognition&RewardsRecognition&Rewards
Recognition&Rewards
donnettefernandez
?
Presentatie Scriptie!
Presentatie Scriptie!Presentatie Scriptie!
Presentatie Scriptie!
lucvanzelst
?

Similar to Sviluppare applicazioni geolocalizzate per iPhone (20)

Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
Riccardo Solimena
?
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Massimiliano Leone
?
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
GWTcon
?
I linguaggi del web - seconda edizione (3 giornata)
I linguaggi del web - seconda edizione (3 giornata)I linguaggi del web - seconda edizione (3 giornata)
I linguaggi del web - seconda edizione (3 giornata)
Diego La Monica
?
iOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele GaliottoiOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele Galiotto
mokapp
?
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
Diego La Monica
?
Automation Night (Docker)
Automation Night (Docker)Automation Night (Docker)
Automation Night (Docker)
Giuliano Latini
?
Presentazione tesi magistrale
Presentazione tesi magistralePresentazione tesi magistrale
Presentazione tesi magistrale
Federico Cacco
?
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetes
Giuliano Latini
?
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
Dominopoint - Italian Lotus User Group
?
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
Romualdo Gobbo
?
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015
Todi Appy Days
?
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple Watch
Paolo Musolino
?
MySQL Tech Tour 2016 - Panoramica sul progetto Openstack
MySQL Tech Tour 2016 - Panoramica sul progetto OpenstackMySQL Tech Tour 2016 - Panoramica sul progetto Openstack
MySQL Tech Tour 2016 - Panoramica sul progetto Openstack
Par-Tec S.p.A.
?
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
Giovanni Buffa
?
Prototipo3 - limulo at electropark 2013
Prototipo3 - limulo at electropark 2013Prototipo3 - limulo at electropark 2013
Prototipo3 - limulo at electropark 2013
Limulo
?
L'avventura dell'interprete UI - Un'indagine Java di Lotus Holmes
L'avventura dell'interprete UI - Un'indagine Java di Lotus HolmesL'avventura dell'interprete UI - Un'indagine Java di Lotus Holmes
L'avventura dell'interprete UI - Un'indagine Java di Lotus Holmes
Dominopoint - Italian Lotus User Group
?
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
Marcello Teodori
?
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
?
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
dotnetcode
?
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
Riccardo Solimena
?
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Massimiliano Leone
?
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
GWTcon
?
I linguaggi del web - seconda edizione (3 giornata)
I linguaggi del web - seconda edizione (3 giornata)I linguaggi del web - seconda edizione (3 giornata)
I linguaggi del web - seconda edizione (3 giornata)
Diego La Monica
?
iOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele GaliottoiOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele Galiotto
mokapp
?
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
Diego La Monica
?
Presentazione tesi magistrale
Presentazione tesi magistralePresentazione tesi magistrale
Presentazione tesi magistrale
Federico Cacco
?
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetes
Giuliano Latini
?
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
Romualdo Gobbo
?
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015
Todi Appy Days
?
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple Watch
Paolo Musolino
?
MySQL Tech Tour 2016 - Panoramica sul progetto Openstack
MySQL Tech Tour 2016 - Panoramica sul progetto OpenstackMySQL Tech Tour 2016 - Panoramica sul progetto Openstack
MySQL Tech Tour 2016 - Panoramica sul progetto Openstack
Par-Tec S.p.A.
?
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
Giovanni Buffa
?
Prototipo3 - limulo at electropark 2013
Prototipo3 - limulo at electropark 2013Prototipo3 - limulo at electropark 2013
Prototipo3 - limulo at electropark 2013
Limulo
?
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
?
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
dotnetcode
?

Sviluppare applicazioni geolocalizzate per iPhone

  • 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 linformazione 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 C 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, lorientamento 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 unistanza 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 C locationManager:didUpdateToLocation:fromLocation: C locationManager:didFailWithError: ? Eventi di orientamento (opzionali C a meno di usare la bussola) C locationManager:didUpdateHeading: C 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 unistanza della classe CLLocationManager, che viene esposta tramite luso 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 listanza e inizializza una nuova instanza di CLLocationManager. ? Viene associata listanza della classe come delegato dellistanza 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 lapplicazione. ? 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 nellinterfaccia: ? 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 linterface builder facendo doppio click sullo xib VeniceCampViewController, in Resources. ? Aggiungete una label e collegatela al Files 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 ? Lultima location ricevuta ? CLLocationDistance distanceFilter ? Distanza dallultima 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 laccuretezza 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 lintroduzione 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 limport #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; ? DallInterface Builder aggiungete una mappa e associatela al Files 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 linterface 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