2014-07-22 4 views
6

Ich versuche, Adresse über CLLocationManager mit Breiten- und Längengrad zu bekommen, aber es gibt nur Staat und Land Name, ich will Stadt auch, ich bin meinen Code anhängen kann mir jemand sagen, wie kann ich meinen Code ändern, um Stadt Namen auch zu bekommen. unten ist mein CodeWie erhält man den Städtenamen über CLlocationManager mit Längen- und Breitengrad 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

Sie erhalten nicht wirklich "Adresse über CLLocationManager". Sie erhalten es über CLGeocoder (CLLocationManager gibt Ihnen nur Koordinaten). Der Code sieht gut aus. Es kann spezifisch für die Koordinaten sein, die CLGeocoder (Apple) möglicherweise nicht gut geokodieren kann (Google scheint darin besser zu sein). Sind die Koordinaten 26.9260, 75.8235? – Anna

Antwort

7

die Sie interessieren ..

-(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; 
} 

Komma getrennt senden Latitude Länge .. und versuchen, es funktioniert gut

Referenz-Link Get Address From Latitude Longitude using Apple Function in iOS & iPad

+0

Ich möchte die Google Map-API nicht verwenden. Gibt es eine Möglichkeit, den Städtenamen mit CLLocationManager zu ermitteln? – vijay

+0

Im letzten Projekt habe ich das benutzt. ,, Aber ich habe keine Ahnung über CLLocationManager ... Bitte versuchen Sie zu suchen, falls verfügbar, dann werden Sie sicher bekommen ... Versuchen Sie mehr zu suchen,., .. –

0

Sie verwenden k-constants aus der ABPerson-Klasse aus dem AddressBook-Framework für CLGeocoder-Objektschlüssel. Während einige übereinstimmen können, bin ich mir ziemlich sicher, dass andere dies nicht tun werden.

Sie können versuchen, ...

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

Wir werden die komplette Adresse basierend auf Breitengrad erhalten und longitude.Here ist der Beispielcode.

- (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 unten i verschiedenen types.So erwähnt leicht können Sie überprüfen, it.These sind alle gehört zu CLPlacemark Klasse objects.This Klasse kann auf CoreLocation Framework zur Verfügung stehen.

@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; 

Was immer Sie wollen, dass es einfach hinzufügen und die result.Here zu erhalten, ist Referenz link.

Verwandte Themen