如何获取所选地图引脚的坐标数据?

我正在尝试获取我在地图上选择的每个引脚的坐标。 我有一个问题,我选择的每个引脚都给我相同的值。

在副标题中我可以看到我选择的每个引脚的值,但是当我将它等于Lat和Lon字符串值时,它总是给我相同的值,因此Lat和Lon字符串值不会改变。 那么请问我的问题在哪里?

- (void)viewDidLoad{ CLLocationCoordinate2D annotationCoord; annotationPoint.subtitle = [NSString stringWithFormat:@"%f & %f", annotationPoint.coordinate.latitude, annotationPoint.coordinate.longitude]; //Lat and Lon are FLOAT. Lat = annotationPoint.coordinate.latitude; Lon = annotationPoint.coordinate.longitude; NSLog(@"Lat is: %f and Lon is: %f", Lat, Lon); } 

我这样做是为了到达地址以获取AppleMap应用程序的方向。 我需要选择的引脚值。

  - (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id )annotation { MKPinAnnotationView *pinAnnotation = nil; if(annotation != locationMap.userLocation) { static NSString *defaultPinID = @"myPin"; pinAnnotation = (MKPinAnnotationView *)[locationMap dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; if ( pinAnnotation == nil ) pinAnnotation = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease]; pinAnnotation.canShowCallout = YES; //instatiate a detail-disclosure button and set it to appear on right side of annotation UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; [infoButton addTarget:self action:@selector(infoButton:) forControlEvents:UIControlEventTouchUpInside]; pinAnnotation.rightCalloutAccessoryView = infoButton; } return pinAnnotation; } 

LAT和LON的值始终相同。 请问哪里可能是我的问题?

 -(void)infoButton:(id)sender{ NSString *str = [NSString stringWithFormat:@"http://maps.apple.com/maps?saddr=%f,%f&daddr=%f,%f", Lat,Lon,lat1,lon1]; NSLog(@"Test %f, %f", Lat, Lon); NSURL *URL = [NSURL URLWithString:str]; [[UIApplication sharedApplication] openURL:URL]; } 

测试解决方案:

 -(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{ MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init]; CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:annotationPoint.coordinate.latitude longitude:annotationPoint.coordinate.longitude]; NSLog(@"RESULT: Lat:%@ Long:%@", [[view annotation]coordinate].latitude,[[view annotation]coordinate].longitude); } 

NSLog结果: LAST: +/- 0.00m (speed -1.00 mps / course -1.00) @ 8/23/13, 10:01:04 AM Standard Time

试试这个行代码:

 CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:[(MyAnnotation*)[view annotation] coordinate].latitude longitude:[(MyAnnotation*)[view annotation] coordinate].longitude]; 

在方法中:

 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 

希望能帮助到你!!

每次按下“显示”按钮时,都会打印出LatLon的值,并使用值lat1lon1 ,但只能在viewDidLoad更改它们。 因此,一旦页面加载,无论您按什么针,您将始终打印出相同的值。

您应该实现正常的委托函数- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control而不是为您的按钮指定目标。 在那里,您可以使用viewannotation属性并获取其具有所需信息的coordinate