{"id":665,"date":"2009-11-07T23:04:12","date_gmt":"2009-11-07T22:04:12","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=665"},"modified":"2010-09-28T15:29:59","modified_gmt":"2010-09-28T13:29:59","slug":"t005-usare-le-mappe-di-google","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t005-usare-le-mappe-di-google\/","title":{"rendered":"T#005 &#8211; Usare le mappe di google"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeIS.jpg\" alt=\"mappeIS\" title=\"mappeIS\" width=\"80\" height=\"150\" class=\"alignleft size-full wp-image-673\" \/> Con il tutorial di oggi vedremo come usare le mappe di google all&#8217;interno delle nostre applicazioni. Il programma che creeremo ci permetter\u00e0 di visualizzare la mappa di google, scegliere il tipo di visualizzazione mostrata tra standard, satellite o ibrida, abilitare o disabilitare le funzioni di zoom e scroll utilizzabili tramite il multitouch e mostrare la nostra posizione sulla mappa. Tutto ci\u00f2 \u00e8 reso possibile grazie Framework MapKit, che dovremo ovviamente aggiungere al nostro progetto.<\/p>\n<p>Creiamo un nuovo progetto, scegliendo dai template proposti &#8220;View-based Application&#8221;, diamo il nome alla nostra applicazione, ad esempio &#8220;mappe&#8221;, scegliamo la posizione dove salvare e proseguiamo. Prima di tutto aggiungiamo il framework. Per farlo cliccate col pulsante destro del mouse sulla cartella &#8220;Resources&#8221; dentro &#8220;Groups &amp; Files&#8221;, cliccate quindi su &#8220;Add&#8221; e infine su &#8220;Existing Frameworks&#8230;&#8221;. Selezionate mapKit.framework, quindi cliccate su Add:<!--more--><\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mapKit_Framework.jpg\" alt=\"mapKit_Framework\" title=\"mapKit_Framework\" width=\"338\" height=\"534\" class=\"aligncenter size-full wp-image-670\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mapKit_Framework.jpg 338w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mapKit_Framework-189x300.jpg 189w\" sizes=\"auto, (max-width: 338px) 100vw, 338px\" \/><br \/>\n<\/center><\/p>\n<p>Apriamo ora il file &#8220;mappeViewController.h&#8221; e inseriamo il codice seguente:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n#import <MapKit\/MapKit.h>\r\n\r\n@interface mappeViewController : UIViewController <MKMapViewDelegate> {\r\n\tIBOutlet MKMapView *mapView;\r\n\tIBOutlet UISwitch *switchZoom;\r\n\tIBOutlet UISwitch *switchScroll;\r\n\tIBOutlet UIButton *cmdMiaPosizione;\r\n\tIBOutlet UISegmentedControl *segmentTipoMappa;\r\n}\r\n\r\n- (IBAction)gestioneZoom:(id)sender;\r\n- (IBAction)gestioneScroll:(id)sender;\r\n- (IBAction)visualizzaMiaPosizione:(id)sender;\r\n- (IBAction)mostraTipoMappa:(id)sender;\r\n\r\n@end\r\n<\/pre>\n<p>Come potete vedere, abbiamo provveduto ad importare il framework grazie all&#8217;istruzione &#8220;#import MapKit\/MapKit.h&#8221; e a specificare il protocollo &#8220;MKMapViewDelegate&#8221;. Abbiamo inoltre dichiarato 5 oggetti di tipo IBOutlet, che collegheremo poi ad altrettanti oggetti creati in Interface Builder. Le dichiarazioni comprendono la vista della mappa di tipo MKMapView, due controlli switch per il controllo di zoom e scroll di tipo UISwitch, un pulsante UIButton che useremo per mostrare la nostra posizione e un UISegmentedControl che useremo infine per scegliere il tipo di visuale per la mappa.  Dopodich\u00e8 abbiamo dichiarato i 4 metodi che ci permetteranno di eseguire le operazioni appena descritte.<\/p>\n<p>Apriamo ora il file &#8220;mappeViewController.m&#8221; e andiamo a scrivere il codice dei nostri metodi.<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n- (IBAction)gestioneZoom:(id)sender{\r\n\tif (switchZoom.on){\r\n\t\tmapView.zoomEnabled=TRUE;\r\n\t} else {\r\n\t\tmapView.zoomEnabled=FALSE;\r\n\t}\r\n\r\n}\r\n\r\n- (IBAction)gestioneScroll:(id)sender{\r\n\tif (switchScroll.on){\r\n\t\tmapView.scrollEnabled=TRUE;\r\n\t} else {\r\n\t\tmapView.scrollEnabled=FALSE;\r\n\t}\r\n\r\n}\r\n\r\n- (IBAction)visualizzaMiaPosizione:(id)sender{\r\n\tmapView.showsUserLocation=TRUE;\r\n}\r\n\r\n- (IBAction)mostraTipoMappa:(id)sender{\r\n\tif ([segmentTipoMappa selectedSegmentIndex]==0) {\r\n\t\tmapView.mapType = MKMapTypeStandard;\r\n\t} else if ([segmentTipoMappa selectedSegmentIndex]==1) {\r\n\t\tmapView.mapType = MKMapTypeSatellite;\r\n\t} else if ([segmentTipoMappa selectedSegmentIndex]==2) {\r\n\t\tmapView.mapType = MKMapTypeHybrid;\r\n\t}\r\n}\r\n<\/pre>\n<p>Il codice \u00e8 molto semplice, analizziamolo brevemente. Per quanto riguarda il controllo di zoom e scroll, non facciamo altro che verificare se lo switch \u00e8 in stato ON e in quel caso abilitiamo la relativa funzione settandola a TRUE, in caso contrario, grazie a FALSE, la funzione cesser\u00e0 di funzionare. Anche il codice inerente la visualizzazione della propria posizione sulla mappa \u00e8 molto semplice e non facciamo altro che impostare la propriet\u00e0 showsUserLocation della mapView a TRUE. L&#8217;ultimo medoto, infine, verifica quale pulsante dell&#8217;UISegnmentedControl \u00e8 stato premuto e imposta la visuale corrispondende tramite &#8220;MKMapTypeStandard&#8221; per la visuale Standard, &#8220;MKMapTypeSatellite&#8221; per quella dal satellite e &#8220;MKMapTypeHybrid&#8221; per la visuale ibrida, un mix delle due precedenti.<\/p>\n<p>A questo punto non ci resta che disegnare la nostra interfaccia grafica con Interface Builder ed effettuare i rispettivi collegamenti tra gli oggetti IB e quelli creati via codice da Xcode. Apriamo il file &#8220;mappeViewController.xib&#8221; e trasciniamo nella View i seguenti oggetti:<\/p>\n<ul>\n<li>N. 1 MKMapView<\/li>\n<li>N. 2 UISwitch<\/li>\n<li>N. 1 UIButton<\/li>\n<li>N. 1 UISegmentedControl<\/li>\n<li>N. 2 UILabel<\/li>\n<\/ul>\n<p>Posizioniamoli quindi in modo che la vostra vista sia simile a quella mostrata in figura:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeIB.jpg\" alt=\"mappeIB\" title=\"mappeIB\" width=\"320\" height=\"502\" class=\"aligncenter size-full wp-image-671\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeIB.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeIB-191x300.jpg 191w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n<p>Le impostazioni di default per questi controlli vanno pi\u00f9 che bene per questo tutorial. Unica accortezza la propriet\u00e0 &#8220;Segments&#8221; dell&#8217;UISegmentedControl che dovrete settare a 3 in quanto saranno proprio 3 le scelte selezionabili dall&#8217;utente durante l&#8217;esecuzione della nostra applicazione. Ricordate inoltre di modificare il testo delle UILabel settandole a &#8220;Zoom&#8221; e &#8220;Scrool&#8221;. Settate il testo del pulsante inserendo &#8220;Mostra mia posizione&#8221; come testo visualizzato e infine inserite, tramite semplice doppio-click, le scritte &#8220;Standard&#8221;, &#8220;Satellite&#8221; e &#8220;Ibrida&#8221; nell&#8217;UISegmentedControl.<\/p>\n<p>Ora cliccate su &#8220;File&#8217;s Owner&#8221; e tramite la finestra &#8220;Connections&#8221; effettuate i rispettivi collegamenti tra gli oggetti IB e quelli creati da codice, come mostrato nella prossima figura:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeColl.jpg\" alt=\"mappeColl\" title=\"mappeColl\" width=\"287\" height=\"347\" class=\"aligncenter size-full wp-image-672\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeColl.jpg 287w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeColl-248x300.jpg 248w\" sizes=\"auto, (max-width: 287px) 100vw, 287px\" \/><br \/>\n<\/center><\/p>\n<p>Ora potete salvare, chiudere Interface Builder e tornare ad Xcode. Cliccate su Build and Run e testate il programmino appena creato su iPhone Simulator o sul vostro dispositivo.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeIS.jpg\" alt=\"mappeIS\" title=\"mappeIS\" width=\"386\" height=\"742\" class=\"aligncenter size-full wp-image-673\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeIS.jpg 386w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/mappeIS-156x300.jpg 156w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><br \/>\n<\/center><\/p>\n<p><center><\/p>\n<h4>Video Tutorial<\/h4>\n<p> by David Pollak<br \/>\n<\/center><\/p>\n<p><center><br \/>\n<strong>Parte 1<\/strong><br \/>\n<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/HzX8u_Z5lbc&#038;hl=it_IT&#038;fs=1&#038;\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/HzX8u_Z5lbc&#038;hl=it_IT&#038;fs=1&#038;\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"><\/embed><\/object><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<strong>Parte 2<\/strong><br \/>\n<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/rPJ2o9YjfVk&#038;hl=it_IT&#038;fs=1&#038;\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/rPJ2o9YjfVk&#038;hl=it_IT&#038;fs=1&#038;\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"><\/embed><\/object><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con il tutorial di oggi vedremo come usare le mappe di google all&#8217;interno delle nostre applicazioni. Il&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[421,191,420,38,5,4,14,1,23],"class_list":["post-665","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-api-google-iphone","tag-mapkit","tag-mappe-di-google","tag-mkmapview","tag-objective-c","tag-programmazione","tag-sdk","tag-tutorial-pratici","tag-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=665"}],"version-history":[{"count":31,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/665\/revisions"}],"predecessor-version":[{"id":4474,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/665\/revisions\/4474"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}