SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
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 l’informazione 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 – 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,
     l’orientamento 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 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
    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
– 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
@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 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
@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 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
    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
     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
    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 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
    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 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
    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
       ▪ 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
    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
    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
    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
    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 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
    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

Mais conteúdo relacionado

Destaque

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 LiberoEduard Roccatello
 
The Power Of Story shared
The Power Of Story sharedThe Power Of Story shared
The Power Of Story sharedEddy 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 '08vijay.proto
 
Taiwan:Island (team6)
Taiwan:Island (team6)Taiwan:Island (team6)
Taiwan:Island (team6)asuka
 
教師資料網頁樣板
教師資料網頁樣板教師資料網頁樣板
教師資料網頁樣板asuka
 
Definitieve Pp
Definitieve PpDefinitieve Pp
Definitieve Ppanne88
 
Competenties
CompetentiesCompetenties
Competentiesanne88
 
Women’S Beauty Bodies
Women’S Beauty BodiesWomen’S Beauty Bodies
Women’S Beauty Bodiessafdar
 
Presentatie Scriptie!
Presentatie Scriptie!Presentatie Scriptie!
Presentatie Scriptie!lucvanzelst
 

Destaque (16)

Web Browser
Web BrowserWeb Browser
Web Browser
 
Google Hacking
Google HackingGoogle Hacking
Google Hacking
 
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
 
Similarities&Differences2
Similarities&Differences2Similarities&Differences2
Similarities&Differences2
 
Pricica
PricicaPricica
Pricica
 
The Power Of Story shared
The Power Of Story sharedThe Power Of Story shared
The Power Of Story shared
 
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
 
Taiwan:Island (team6)
Taiwan:Island (team6)Taiwan:Island (team6)
Taiwan:Island (team6)
 
教師資料網頁樣板
教師資料網頁樣板教師資料網頁樣板
教師資料網頁樣板
 
Definitieve Pp
Definitieve PpDefinitieve Pp
Definitieve Pp
 
Editor di Immagini 2.0
Editor di Immagini 2.0Editor di Immagini 2.0
Editor di Immagini 2.0
 
Competenties
CompetentiesCompetenties
Competenties
 
Women’S Beauty Bodies
Women’S Beauty BodiesWomen’S Beauty Bodies
Women’S Beauty Bodies
 
Acharita
AcharitaAcharita
Acharita
 
Recognition&Rewards
Recognition&RewardsRecognition&Rewards
Recognition&Rewards
 
Presentatie Scriptie!
Presentatie Scriptie!Presentatie Scriptie!
Presentatie Scriptie!
 

Semelhante a Sviluppare applicazioni geolocalizzate per iPhone

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 DevicesGWTcon
 
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 Galiottomokapp
 
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 peformanceDiego 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 magistraleFederico Cacco
 
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGiuliano Latini
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Romualdo 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 2015Todi Appy Days
 
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchPaolo 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 OpenstackPar-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 frameworkGiovanni Buffa
 
Prototipo3 - limulo at electropark 2013
Prototipo3 - limulo at electropark 2013Prototipo3 - limulo at electropark 2013
Prototipo3 - limulo at electropark 2013Limulo
 
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 xamarinFabio 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
 

Semelhante a 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...
 
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/...
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
 
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)
 
iOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele GaliottoiOS7 - multitasking e dynamics - Daniele Galiotto
iOS7 - multitasking e dynamics - Daniele Galiotto
 
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
 
Automation Night (Docker)
Automation Night (Docker)Automation Night (Docker)
Automation Night (Docker)
 
Presentazione tesi magistrale
Presentazione tesi magistralePresentazione tesi magistrale
Presentazione tesi magistrale
 
Google cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetesGoogle cloud: Big Data + docker = kubernetes
Google cloud: Big Data + docker = kubernetes
 
#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)
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
 
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
 
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple Watch
 
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
 
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
 
Prototipo3 - limulo at electropark 2013
Prototipo3 - limulo at electropark 2013Prototipo3 - limulo at electropark 2013
Prototipo3 - limulo at electropark 2013
 
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
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
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
 
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
 

Último

Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 

Último (9)

Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 

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 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