Il MapKit framework fornisce moltissime funzionalità utili, tranne quella di restituire Longitudine e Latitudine a partire da un indirizzo. In Javascript, ad esempio, è possibile utilizzare il servizio di Geocoding fornito da Google e discusso in Google Maps: come ottenere Latitudine e Longitudine da un indirizzo. Su Apple iPhone, o iPad, è possibile tuttavia superare l’ostacolo utilizzando in modo diverso i servizi di Google. Nello specifico è possibile chiamare direttamente l’url:
1
| http://maps.google.com/maps/geo?q=[indirizzo]&output=csv |
Dove è [indirizzo] inserire la stringa con l’indirizzo che vogliamo trasformare in coordinate. L’output restituito è del tipo:
1
| 200,8,41.9128300,12.2241172 |
Il primo valore, 200, indica che tutto è andato bene (200 OK). Il secondo, 8, è il Google accuracy parameter (1-10). Gli ultimi due valori sono, finalmente, latitudine e longitudine. Vediamo adesso un possibile prototipo di un metodo da inserire nelle nostre applicazioni:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| - (CLLocationCoordinate2D )getLocationFromAddress :(NSString*)address {
NSString *urlString = [NSString stringWithFormat :@"http://maps.google.com/maps/geo?q=%@&output=csv",
[address stringByAddingPercentEscapesUsingEncoding : NSUTF8StringEncoding ]];
NSString *locationString = [[[NSString alloc ] initWithContentsOfURL :[NSURL URLWithString :urlString ]] autorelease ];
NSArray *listItems = [locationString componentsSeparatedByString :@","];
//int zoom = 0;
double latitude = 0.0;
double longitude = 0.0;
if([listItems count ] > = 4 && [[listItems objectAtIndex :0] isEqualToString :@"200"]) {
//zoom = [[listItems objectAtIndex:1] intValue];
latitude = [[listItems objectAtIndex :2] doubleValue ];
longitude = [[listItems objectAtIndex :3] doubleValue ];
} else {
// Errore
}
CLLocationCoordinate2D location;
location.latitude = latitude;
location.longitude = longitude;
return location;
} |
Note interessanti
La stringa restituita in locationString viene “splittata” tramite il metodo componentsSeparatedByString, alla stregua della funzione explode() del PHP per intenderci. Nell’esempio da me proposto ho inserito – ma commentato – il codice per recuperare anche il Google accuracy parameter, o fattore di scala di precisione, indicato con zoom.
Sorgente esempio
Per completezza ho realizzato un piccolo applicativo di esempio con il quale è possibile provare il metodo sopra proposto; inserite un qualsiasi indirizzo e iPhone lo mostrerà sulla mappa.

Scarica Sorgente
Ringrazio il team di devAPP per l’ispirazione di questo articolo.
Continua...
Per trovare le coordinate di un indirizzo, ovvero Latitudine e Longitudine, possiamo usare questo semplice e utile hack. Aprire il sito di Google Maps. Una volta sulla mappa cercate l’indirizzo che desiderate (ad esempio Via Cortese 10, Modena).
Continua...
Anche questa volta rispondo ad un commento con un Post, visto il generale interesse. Armando mi chiedeva se era possibile, tramite Google Maps, ottenere Latitudine e Longitudine a partire da un nome di città o di una strada. La risposta è si! Tramite il servizio Google Maps API geocoding service è possibile chiedere direttamente a Google di trasfromare la nostra informazione testuale (stato, città, via) in coordinate geografiche. Potete provare un esempio online direttamente sul sito della documementazione Google.
Continua...

È stata rilasciata la beta 0.6 del componente UMAP per Flash CS3 (Actionscript 3.0) – nel pacchetto è presente anche la versione per Flex. Tra le novità notiamo l’adozione di OpenStreetMap come provider predefinito. Inoltre è stato aggiunto un avanzato gestore dei Marker e una serie di ottimizzazioni varie.
Continua...

Mapstraction è una libreria Javascript che si pone come layer intermedio per utilizzare le Mappe dei più noti sistemi oggi disponibili. L’idea è quella di fornire un wrapper, un’interfaccia, in grado di unificare il codice a prescindere, quindi, dal tipo di motore di rendering mappe che si desidera utilizzare.
Sul sito sono disponibili demo e documentazione. La libreria è scaricabile in modo gratuito. In questa release vengono supportati i 9 motori più noti: OpenStreetMap, Yahoo, Google, Microsoft, Map24, MultiMap, MapQuest, FreeEarth e OpenLayers.
Supporta la creazione di Point, Line e Polygon. È possibile inserire proprie immmagini in sovraimpressione. Interessante il supporto per Geocoding degli indirizzi stradali e le direzioni di marca! Utile la compatibilità con i feed GeoRSS e KML.
Dagli esempi del codice si capisce subito quanto sia utile uno strumento di questo tipo. Ogni “interfaccia” (Google, Microsoft, Yahoo, etc…) ha infatti una sua serie di API. Tramite Mapstraction, invece, possiamo scrivere un unico blocco di codice e lasciare all’utente finale la scelta del tipo di provider da usare. Ad esempio, quando si inizializza la libreria, la riga di codice seguente:
1 2
| // initialise the map with your choice of API
var mapstraction = new Mapstraction('mapstraction','google'); |
Determina il motore Google! Viene da se che, sostituiendo la stringa ‘google’, cambiamo immediatamente motore di rendering delle mappe!
1 2
| // initialise the map with your choice of API
var mapstraction = new Mapstraction('mapstraction','microsoft'); |
Nonostante la libreria non sia davvero completa, permette di integrare in un unico framework tutte le features “sparse” delle singole librerie. Il motore di rendering Microsoft, ad esempio, permette la visualizzazione “a volo d’uccello”. OpenStreetMap e Google hanno un’ottima gestione delle mappe stradali, comprese quelle italiane. Insomma, per chi deve affrontare lo sviluppo di un’applicazione con l’uso di Mappe e non riesce – proprio - a decidere quale tecnologia utilizzare per lo sviluppo, Mapstraction permette – appunto – di astrarsi, di risolvere il dilemma introducendo, di fatto, un terzo attore e, in tale modo, fornirci la possibilità di cambiare motore di rendering in qualsiasi momento. Quindi bella idea da seguire e da usare!
Continua...
Ultimi Commenti
Marco: Ti ringrazio moltissimo, mi hai illuminato
ho risolto impostando [cc_objc] //OptionViewController.m -...
Giovambattista Fazioli: @Marco: Ti consiglio un approccio credo più corretto. Se hai eseguito il subclass del tab...
Marco: Scusa lo spam.. ho notato che c’è un errore.. ecco la correzione [cc_objc] /** PrimaClasse.h **/ #import...
Marco: dimenticato.. in [cci]OptionViewController[/cci ] il [cci]@syntetize[/cci] del delegato l’ho messo
luigi: molto chiaro e semplice devo ammettere che anche scrivendo da un pà difficilmente uso delegati creati da...