2011-07-06 4 views
3

Je fais une application dans laquelle je reçois l'adresse, je dois trouver la latitude et la longitude de cette adresse et de montrer l'endroit sur la carteComment trouver Latitude et Longitude de Adresse dans l'iPhone

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [mapView setMapType:MKMapTypeStandard]; 
    [mapView setZoomEnabled:YES]; 
    [mapView setScrollEnabled:YES]; 
    mapView.showsUserLocation = YES; 
    MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } }; 

    geoCoder.delegate = self; 
    [geoCoder start]; 

    double latitude = 0, longitude = 0; 

    region.center.latitude = latitude; 
    region.center.longitude = longitude; 
    region.span.longitudeDelta = 0.01f; 
    region.span.latitudeDelta = 0.01f; 
    [mapView setRegion:region animated:YES]; 

    [mapView setDelegate:self]; 

    DisplayMap *ann = [[DisplayMap alloc] init]; 
    ann.title = @"BarRestaurant"; 
    ann.subtitle = @"..."; 
    ann.coordinate = region.center; 
    [mapView addAnnotation:ann]; 
} 

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation: 
(id <MKAnnotation>)annotation { 

    MKPinAnnotationView *pinView = nil; 
    if(annotation != mapView.userLocation) 
    { 
     static NSString *defaultPinID = @"com.invasivecode.pin"; 
     pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; 
     if (pinView == nil) pinView = [[[MKPinAnnotationView alloc] 
              initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; 

     pinView.pinColor = MKPinAnnotationColorRed; 
     pinView.canShowCallout = YES; 
     pinView.animatesDrop = YES; 
    } 
    else 
    { 
     [mapView.userLocation setTitle:@"I am here"]; 
    } 
    return pinView; 
} 

- (CLLocationCoordinate2D) geoCodeUsingAddress:(NSString *)address 
{ 
    appRestaurantAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 

    double latitude = 0, longitude = 0; 

    address = delegate.streetName; 

    NSString *esc_addr = [address 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]; 
    if (result) 
    { 
     NSScanner *scanner = [NSScanner scannerWithString:result]; 
     if ([scanner scanUpToString:@"\"lat\":" intoString:nil] && [scanner scanString:@"\"lat\":" intoString:nil]) { 
      [scanner scanDouble:&latitude]; 
      if ([scanner scanUpToString:@"\"lng\":" intoString:nil] && [scanner scanString:@"\"lng\":" intoString:nil]) 
      { 
       [scanner scanDouble:&longitude]; 
      } 
     } 
    } 
    CLLocationCoordinate2D center; 
    center.latitude = latitude; 
    center.longitude = longitude; 
    return center; 
} 

cependant, je ne peux pas trouver la latitude et la longitude s'il vous plaît aidez-moi où je fais mal dans le délégué je reçois l'adresse du serveur Web

Répondre

5

Essayez ce code,

- (CLLocationCoordinate2D) geoCodeUsingAddress:(NSString *)address 
{ 
    double latitude = 0, longitude = 0; 
    NSString *esc_addr = [address 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]; 
    if (result) { 
     NSScanner *scanner = [NSScanner scannerWithString:result]; 
     if ([scanner scanUpToString:@"\"lat\":" intoString:nil] && [scanner scanString:@"\"lat\":" intoString:nil]) { 
      [scanner scanDouble:&latitude]; 
      if ([scanner scanUpToString:@"\"lng\":" intoString:nil] && [scanner scanString:@"\"lng\":" intoString:nil]) { 
       [scanner scanDouble:&longitude]; 
      } 
     } 
    } 
    CLLocationCoordinate2D center; 
    center.latitude = latitude; 
    center.longitude = longitude; 
    return center; 
} 

Voir aussi link

+0

Merci pour la réponse que j'ai mis en place et son fonctionnement mais lors de l'analyse de l'emplacement latitude, il ne va pas dans l'instruction if. – user748001

+0

On dirait qu'ils doivent avoir changé leur format; le '@" \ "lat \": "' devrait (actuellement) être '@" \ "lat \": "', ou le scanner ne le trouvera pas. Idem pour le côté 'lng'. –

1

Après ios 5.0, google maps et google maps api ne doivent pas être utilisés dans une carte native. Cela viole à la fois les politiques de Google et d'Apple.

Mais nous pouvons trouver l'emplacement d'Apple fourni cadre mapkit lui-même.

Veuillez voir le lien ci-dessous. https://developer.apple.com/library/ios/documentation/userexperience/conceptual/LocationAwarenessPG/UsingGeocoders/UsingGeocoders.html

Il est très simple à l'aide « CLGeocoder » comme:

geocoder = [[CLGeocoder alloc] init];  

[geocoder geocodeAddressString:@"1 Infinite Loop" 
completionHandler:^(NSArray* placemarks, NSError* error){ 
    for (CLPlacemark* aPlacemark in placemarks) 
    { 
     // Process the placemark. 
    } 
}]; 
Questions connexes