2011-07-06 9 views
3
で住所から緯度と経度を見つけるために

、私はそのアドレスから緯度と経度を見つけると場所を表示する必要が私は私がアドレスを取得していますここで一つのアプリケーションを作っていますどのように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; 
} 

私は緯度と経度を見つけることができませんが、私はこのコードを試してみてください、Webサーバー

答えて

5

からアドレスを取得していますデリゲートで間違ってやっているところ、私を助けてください

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

も参照してくださいlink

+0

おかげで、それはif文の内側つもりはありません。 – user748001

+0

彼らは彼らのフォーマットを変えなければならないように見えます; '' lat '': ''(現在) '' @ '' lat ":" 'にする必要があります。そうしないと、スキャナは見つけられません。同じことが「lng」側にもあります。 –

1

ios 5.0以降は、GoogleマップとGoogleマップapiをネイティブmapviewで使用しないでください。 GoogleとAppleのポリシーに違反します。

しかし、リンゴからマップキットのフレームワークが提供されています。

以下のリンクをご覧ください。 「CLGeocoder」を使用して、非常に単純な https://developer.apple.com/library/ios/documentation/userexperience/conceptual/LocationAwarenessPG/UsingGeocoders/UsingGeocoders.html

そののような:緯度の場所をスキャンしながら、私はしかし、その作業を実施してきた答えを

geocoder = [[CLGeocoder alloc] init];  

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