Compatibile con Xcode 8

Tutorial CLGeocoder in Swift, cercare informazioni nella MapView

ENTRA NEL NOSTRO GRUPPO FACEBOOK

Come riesce un’applicazione a trovare un’informazione nella mappa?

In questo tutorial imparerai ad utilizzare il Core Location Geocoder, lo strumento che permette di trasformare un punto, definito da coordinate preview app Tutorial CLGeocoder in Swift
(langitudine e latitudine), in un’informazione user-friendly.

Generalmente sei abituato a pensare ad una mappa tramite informazioni testuali come gli indirizzi, le vie e i riferimenti geografici (piazza, vicolo, paese, città ecc). Dal punto di vista informatico, o meglio scientifico, un punto della mappa è definito a partire da delle coordinate geografiche. Latitudine e Longitudine.

Nel tutorial in cui ti ho fatto vedere come utilizzare la MapView e come recuperare la posizione dell’utente, ti avevo già spiegato cos’erano queste coordinate e a cosa servissero.

Adesso andremo un po’ oltre. Ti farò vedere come, partendo da un’indirizzo testuale, ad esempio “Via Etnea Catania”, riuscirai a recuperare le coordinate geografica ed a visualizzare nella MapView il luogo cercato. Il tutto grazie ad uno strumento, il CLGeocoder in Swift, che grazie ad un sistema che sposta la complessità dell’operazione ai server Apple, riesce ad eseguire il processo di geolocalizzazione inversa. Ovvero, come già ti ho spiegato, trovare le coordinate partendo da un indirizzo testuale.

In fondo alla pagina trovi il download del progetto completo.

Sei pronto? Cominciamo!

Crea un nuovo progetto iOS Single View Application. Vai su File\New\Project… , seleziona iOS e Sigle View Application, premi Next. Dai un nome e assicurati di aver selezionato il linguaggio Swift, fai Next e poi Create.

Adesso devi importare, all’interno del progetto, alcuni framework che permettono il funzionamento degli strumenti che utilizzerai. I framework in questione sono:

  • CoreLocation
  • MapKit
  • AddressBookUI

Tutti e tre servono ad aggiungere le funzionalità di Geolocalizzazione.

Tutorial CLGeocoder in Swift

Fatto?

Ora devi aggiungere gli elementi grafici all’interfaccia. L’applicazione è composta da una MapView, che sarà delegata alla visualizzazione della mappa, e una TextField grazie alla quale l’utilizzatore potrà cercare gli elementi nella mappa.

Adesso spostati nello storyboard e aggiungi, trascinando dall‘Object Library al ViewController, una MapView. Nel frattempo sistema i vincoli di auto layout. Ridimensiona la mappa in modo da fargli occupare tutta la finestra dell’applicazione.

Infine aggiungi una Text Field nella parte superiore dell’applicazione. Dovresti avere un layout così:

mapview-textfield-ricerca

Sempre dallo storyboard, seleziona il ViewController e apri l’Assistant Editor. Crea una IBOutlet per la MapView ed un’altra per la TextField. Poi crea una IBAction per la TextField con evento: Event il Did End on Exit. Questo farà si che la funzione venga chiamata solo dopo che l’utente abbia premuto il tasto invio dalla tastiera.

Spostati nel file ViewController.swift ed importa tutti i framework che hai inserito precedentemente. Infine dovresti avere qualcosa di simile:

Se hai avuto dei problemi a seguire questa prima parte del tutorial, forse può interessarti seguire i corsi di sviluppo app dove spiego tutte le basi per la realizzazione delle applicazioni.

In alternativa e se ti va, iscriviti alla newsletter per rimanere sempre aggiornato:

Pausa fatta? Procediamo!

Ti ho detto, all’inizio del tutorial, che il CLGeocoder è lo strumento che converte la posizione di un oggetto, in latitudine e in longitudine, in un indirizzo user friendly come una via, una città o regione. Noi dobbiamo fare l’operazione inversa ovvero dobbiamo passare un indirizzo al geocoder e aspettare che lui lo trasformi in coordinate da poter riutilizzare nella mappa.

Pensa all’applicazione Mappe di iOS e immagina di dover cercare la posizione di “Roma”. Quello che faresti è sicuramente inserire “Roma” nel campo di ricerca e aspettare l’aggiornamento della Mappa, la quale si sposterà nel punto desiderato. In quel frangente di tempo, ovvero dall’inserimento dell’indirizzo all’aggiornamento della mappa, è stata fatta una richiesta di trasformazione di un indirizzo fisico in coordinate geografiche.

Nel dettaglio quello che fa il CLGeocoder in Swift è cercare, in modo asincrono, l’indirizzo richiesto in un Server esterno. Se l’indirizzo o gli indirizzi sono stati trovati ritorna una lista di tutti i relativi indirizzi che spetta all’utilizzatore filtrare. In caso di abuso di richieste o di altri errori il CLGeocoder ritorna un errore.

Il metodo che permette di geolocalizzare un indirizzo è contenuto all’interno della classe CLGeocoder e si chiama geocodeAddressString. Come parametri vuole fatto la Stringa che rappresenta l’indirizzo, o banalmente il luogo da cercare, e una closure che permette di accedere ai punti trovati dalla funzione di geolocalizzazione o, in caso contrario, all’errore generato.

Modifica la IBAction, associato alla TextField, ed inserisci il seguente codice:

La funzione crea una variabile di tipo CLPlacemark che è l’oggetto che contiene diverse informazioni riguardo ad un punto della mappa. Informazioni come la latitudine, logitudine, la regione ecc. Poi fa una richiesta al CLGeocoder, tramite il metodo geocodeAddressString, passandogli l’indirizzo cercato, sender.text, e una Closure che:

  • setta le coordinate del placemark uguali al primo placemark[0] della lista dei placemarks trovati.
  • setta la mapView alla posizione del placemark.
  • crea un pointAnnotation nella posizione cercata.

Adesso avvia l’applicazione e, se tutto è andato per il verso giusto, dovresti vedere qualcosa di simile:

test app Tutorial CLGeocoder in Swift

Conclusione

Ricordati che se vuoi cercare qualcosa nella mappa devi obbligatoriamente fare richiesta al CLGeocoder. Sarà lui a trovare quell’indirizzo o quella località nella mappa.

L’applicazione ovviamente è sprovvista di alcuni tool utili come la posizione dell’utente o la possibilità di salvare le posizioni cercate, tutte cose che potete aggiungere voi seguendo i tutorial del sito o partecipando al corso di sviluppo iOS.

Download del progetto

[sociallocker]

Download Link

[/sociallocker]

Buona Programmazione!

Start typing and press Enter to search

Creare un'Applicazione Promemoria con il linguaggio Swift. Impariamo a collegare due tabelle.Connettere il Database Parse con una applicazione iOS. Un Database Online intuitivo e gratuito