2012-01-27 5 views
5

Ho una domanda relativa alla codifica inversa.obiettivo c come ottenere segnaposti di coordinate date

Nella mia app, ho alcune coordinate (non le mie coordinate correnti) e voglio convertirle in segnaposto. Ho scavato molti siti Web e codici ma sono tutti relativi al geocoding inverso della posizione corrente ...

C'è un modo per ottenere segnaposto di coordinate specificate (che non sono la posizione corrente)?

E se c'è, per favore aiutatemi con qualche codice o riferimenti.

+0

Cosa vuoi dire? Dovrai fare la stessa cosa se la posizione è tua o no. Ecco alcuni riferimenti se stai sviluppando per iOS 5: http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLGeocoder_class – vakio

+0

Non puoi assegnare la posizione a CLLocation.coordinat.longitude o latitude. e il metodo reverseGeoCoding accetta solo CLLocation not CLLocationCoordinate2D – Garnik

+2

'CLLocation * loc = [[allocazione CLLocation] initWithLatitude: latitude longitude: longitude]; – vakio

risposta

2

È possibile raggiungere questo obiettivo in due modi: -

Primo modo: - Ottenere informazioni utilizzando le API di Google

-(void)findAddresstoCorrespondinglocation 
{ 
    NSString *str = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=false",myCoordInfo.latitude,myCoordInfo.longitude]; 
    NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease]; 
    [request setRequestMethod:@"GET"]; 
    [request setDelegate:self]; 
    [request setDidFinishSelector: @selector(mapAddressResponse:)]; 
    [request setDidFailSelector: @selector(mapAddressResponseFailed:)]; 
    [networkQueue addOperation: request]; 
    [networkQueue go]; 

} 

in risposta otterrete tutte le informazioni circa la posizione coordinate specificato.

Secondo approccio: -

Implementare invertire geocoding

a) aggiungere mapkit quadro

b) Fare istanza di MKReverseGeocoder nel file h

MKReverseGeocoder *reverseGeocoder; 

c)... in .m file

self.reverseGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate:cordInfo]; 
    reverseGeocoder.delegate = self; 
    [reverseGeocoder start]; 

implementare due metodi delegato di MKReverseGeoCoder

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error 
{ 
    NSLog(@"MKReverseGeocoder has failed."); 
} 

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark 
{ 
    MKPlacemark * myPlacemark = placemark; 
    NSString *city = myPlacemark.thoroughfare; 
    NSString *subThrough=myPlacemark.subThoroughfare; 
    NSString *locality=myPlacemark.locality; 
    NSString *subLocality=myPlacemark.subLocality; 
    NSString *adminisArea=myPlacemark.administrativeArea; 
    NSString *subAdminArea=myPlacemark.subAdministrativeArea; 
    NSString *postalCode=myPlacemark.postalCode; 
    NSString *country=myPlacemark.country; 
    NSString *countryCode=myPlacemark.countryCode; 
    NSLog(@"city%@",city); 
    NSLog(@"subThrough%@",subThrough); 
    NSLog(@"locality%@",locality); 
    NSLog(@"subLocality%@",subLocality); 
    NSLog(@"adminisArea%@",adminisArea); 
    NSLog(@"subAdminArea%@",subAdminArea); 
    NSLog(@"postalCode%@",postalCode); 
    NSLog(@"country%@",country); 
    NSLog(@"countryCode%@",countryCode); 

    } 
+0

solo per notare: in iOS 5.0, è deprecato a favore della classe 'GLGeocoder': http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLGeocoder_class/Reference/Reference.html#//apple_ref/occ/cl/CLGeocoder – Krizz

+0

Suggerirei di usare metodo google api. È facile e più affidabile. – Gypsa

+0

Grazie Gypsa proverò il primo approccio ma come so MKReverseGeoCoder è privato di iOS 5. Grazie in anticipo – Garnik