2014-07-22 17 views
6

Sto cercando di ottenere l'indirizzo tramite CLLocationManager usando latitudine e longitudine ma restituisce solo il nome di stato e di paese, voglio anche la città, appendo il mio codice chiunque può dirmi che come posso modificare il mio codice per ottenere anche il nome della città. Qui di seguito è il mio codicecome ottenere il nome della città tramite CLlocationManager usando latitudine e longitudine in IOS?

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    currentLocation = [locations objectAtIndex:0]; 
    CLGeocoder *geocoder1 = [[CLGeocoder alloc] init]; 

    NSLog(@"Detected Location : %f, %f", currentLocation.coordinate.latitude, currentLocation.coordinate.longitude); 

    //CLLocation *newLocation = [[CLLocation alloc]initWithLatitude:26.9260 longitude:75.8235]; 

    CLLocation *newLocation = [[CLLocation alloc]initWithLatitude:currentLocation.coordinate.latitude longitude:currentLocation.coordinate.longitude]; 

    [geocoder1 reverseGeocodeLocation:newLocation 
        completionHandler:^(NSArray *placemarks, NSError *error) { 

         if (error) { 
          NSLog(@"Geocode failed with error: %@", error); 
          return; 
         } 

         if (placemarks && placemarks.count > 0) 
         { 
          CLPlacemark *placemark = placemarks[0]; 

          NSDictionary *addressDictionary = 
          placemark.addressDictionary; 

          NSLog(@"%@ ", addressDictionary); 
          NSString *address = [addressDictionary 
               objectForKey:(NSString *)kABPersonAddressStreetKey]; 
          NSString *city = [addressDictionary 
              objectForKey:(NSString *)kABPersonAddressCityKey]; 
          NSString *state = [addressDictionary 
               objectForKey:(NSString *)kABPersonAddressStateKey]; 
          NSString *zip = [addressDictionary 
              objectForKey:(NSString *)kABPersonAddressZIPKey]; 


          NSLog(@"%@ %@ %@ %@", address,city, state, zip); 
         } 

        }]; 
} 
+0

Non si ottiene veramente "l'indirizzo tramite CLLocationManager". Lo stai ricevendo tramite CLGeocoder (CLLocationManager ti sta solo dando le coordinate). Il codice sembra ok. Potrebbe essere specifico per le coordinate che CLGeocoder (Apple) potrebbe non essere in grado di geocodificare bene (Google sembra essere migliore in questo). Le coordinate sono 26.9260, 75.8235? – Anna

risposta

7

Prova questa ..

-(NSString*)getAddressFromLatLong : (NSString *)latLng { 
    // NSString *string = [[Address.text stringByAppendingFormat:@"+%@",cityTxt.text] stringByAppendingFormat:@"+%@",addressText]; 
    NSString *esc_addr = [latLng stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

     NSString *req = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@", esc_addr]; 
     NSString *result = [NSString stringWithContentsOfURL:[NSURL URLWithString:req] encoding:NSUTF8StringEncoding error:NULL]; 
     NSMutableDictionary *data = [NSJSONSerialization JSONObjectWithData:[result dataUsingEncoding:NSUTF8StringEncoding]options:NSJSONReadingMutableContainers error:nil]; 
     NSMutableArray *dataArray = (NSMutableArray *)[data valueForKey:@"results" ]; 
     if (dataArray.count == 0) { 
      UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Please Enter a valid address" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
      [alert show]; 
     }else{ 
      for (id firstTime in dataArray) { 
       NSString *jsonStr1 = [firstTime valueForKey:@"formatted_address"]; 
       return jsonStr1; 
      } 
     } 

    return nil; 
} 

Invia separati da virgola latitudine longitudine .. e provare sta funzionando benissimo

Riferimento link Get Address From Latitude Longitude using Apple Function in iOS & iPad

+0

non voglio usare google map API, c'è un modo per ottenere il nome della città usando CLLocationManager. – vijay

+0

Nell'ultimo progetto ho usato questo. ,, Ma io non riguardo CLLocationManager ... Si prega di provare a cercare, se disponibile da questo quindi sicuramente otterrete ... Provate a cercare di più,., .. –

0

Si utilizzano le costanti k della classe ABPerson dal framework AddressBook per le chiavi dell'oggetto CLGeocoder. Mentre alcuni potrebbero eguagliare, sono abbastanza sicuro che gli altri non lo faranno.

Si può provare ...

NSMutableArray *addrArray = [[NSMutableArray alloc] init]; 
//to return address line(s) 
addrArray = [NSMutableArray arrayWithArray: [p.addressDictionary objectForKey:@"FormattedAddressLines"]]; 
[addrArray removeLastObject]; //country name 
NSString *addressString = [addrArray componentsJoinedByString:@" ,"]; 
#if DEBUG 
       NSLog(@"Address: %@", addressString); 
#endif 
0

Saremo Ricevere tutte Indirizzo sulla base di latitudine e longitude.Here è il codice di esempio.

- (void) getAddressFromLatLon:(CLLocation *)location 
{ 

     CLGeocoder *geocoder = [[CLGeocoder alloc] init] ; 
     [geocoder reverseGeocodeLocation:location 
       completionHandler:^(NSArray *array, NSError *error){ 
    if (error){ 
     NSLog(@"Geocode failed with error: %@", error); 
     return; 
    } 
    CLPlacemark *placemark = [array objectAtIndex:0]; 
    NSLog(@"City %@",placemark.subAdministrativeArea); 
    NSLog(@"State %@",placemark.administrativeArea); 

    }]; 
} 

In seguito ho detto types.So diverso è possibile controllare facilmente it.These sono tutti appartiene CLPlacemark classe classe objects.This può essere disponibile sul CoreLocation Framework.

@property (nonatomic, readonly, copy, nullable) NSString *name; // eg. Apple Inc. 
@property (nonatomic, readonly, copy, nullable) NSString *thoroughfare; // street name, eg. Infinite Loop 
@property (nonatomic, readonly, copy, nullable) NSString *subThoroughfare; // eg. 1 
@property (nonatomic, readonly, copy, nullable) NSString *locality; // city, eg. Cupertino 
@property (nonatomic, readonly, copy, nullable) NSString *subLocality // neighborhood, common name, eg. Mission District 
@property (nonatomic, readonly, copy, nullable) NSString *administrativeArea; // state, eg. CA 
@property (nonatomic, readonly, copy, nullable) NSString *subAdministrativeArea; // City, eg. Santa Clara 
@property (nonatomic, readonly, copy, nullable) NSString *postalCode; // zip code, eg. 95014 
@property (nonatomic, readonly, copy, nullable) NSString *ISOcountryCode; // eg. US 
@property (nonatomic, readonly, copy, nullable) NSString *country; // eg. United States 
@property (nonatomic, readonly, copy, nullable) NSString *inlandWater; // eg. Lake Tahoe 
@property (nonatomic, readonly, copy, nullable) NSString *ocean; // eg. Pacific Ocean 
@property (nonatomic, readonly, copy, nullable) NSArray<NSString *> *areasOfInterest; 

Che cosa mai si desidera si aggiunge solo e ottenere il result.Here è di riferimento link.

Problemi correlati