基本上我使用了与Google地方类似的locationSearch / MKLocationSearch库来为用户提供自动填充选项预测结果。在此命令之前,我请求用户在UITextField上输入目的地,然后CCLocationDistance将计算当前位置与其输入位置之间的距离。这很好,直到添加locationSearch。
现在我的问题是我没有得到A和B之间距离的结果。我的假设是因为我不太熟悉Objective-C,我认为在这一类课程中;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.searchDisplayController setActive:NO animated:YES];
MKMapItem *item = results.mapItems[indexPath.row];
[mapView addAnnotation:item.placemark];
[mapView selectAnnotation:item.placemark animated:YES];
[mapView setCenterCoordinate:item.placemark.location.coordinate animated:YES];
[mapView setUserTrackingMode:MKUserTrackingModeNone];
}
我应该选择能够计算距离的项目,但我不知道该怎么做。
这是我在mapviewcontroller.m中的声明;
CLLocationDistance distance;
和反向转发我在下面使用这个片段; - (void)requestForwardGeoCoding:(NSString *)地址 { CLGeocoder geocoder = [[CLGeocoder alloc] init]; [geocoder geocodeAddressString:address completionHandler:^(NSArray placemarks,NSError * error){ for(CLPlacemark * aPlacemark in placemarks) {
CLLocationCoordinate2D fromCoordinate = CLLocationCoordinate2DMake(self.mapView.userLocation.location.coordinate.latitude,self.mapView.userLocation.location.coordinate.longitude);
CLLocationCoordinate2D toCoordinate = CLLocationCoordinate2DMake(aPlacemark.location.coordinate.latitude ,aPlacemark.location.coordinate.longitude);
NSLog(@"my location lat %f lon %f",self.mapView.userLocation.location.coordinate.latitude,self.mapView.userLocation.location.coordinate.longitude);
MKPlacemark *fromPlacemark = [[MKPlacemark alloc] initWithCoordinate:fromCoordinate
addressDictionary:nil];
MKPlacemark *toPlacemark = [[MKPlacemark alloc] initWithCoordinate:toCoordinate
addressDictionary:nil];
NSLog(@"Search Location lat %f long %f", aPlacemark.location.coordinate.latitude , aPlacemark.location.coordinate.longitude );
MKMapItem *fromItem = [[MKMapItem alloc] initWithPlacemark:fromPlacemark];
MKMapItem *toItem = [[MKMapItem alloc] initWithPlacemark:toPlacemark];
[self findDirectionsFrom:fromItem
to:toItem];
CLLocationDegrees latitude, longitude;
latitude = aPlacemark.location.coordinate.latitude;
longitude = aPlacemark.location.coordinate.longitude;
CLLocation *to = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
CLLocationCoordinate2D location;
location.latitude = latitude;
location.longitude = longitude;
VBAnnotation *ann1 = [[VBAnnotation alloc] initWithPosition:location];
[ann1 setCoordinate:location];
ann1.title = address;
ann1.subtitle = @"Destination";
[self.mapView addAnnotation:ann1];
latitude = self.mapView.userLocation.location.coordinate.latitude;
longitude = self.mapView.userLocation.location.coordinate.longitude;
CLLocation *from = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
distance= [to distanceFromLocation:from];
NSLog(@"Distance %.1f", distance/ 1000);
location.latitude = latitude;
location.longitude = longitude;
VBAnnotation *ann = [[VBAnnotation alloc] initWithPosition:location];
[ann setCoordinate:location];
ann.title = @"My Location";
ann.subtitle = @"Where you are";
[self.mapView addAnnotation:ann];
goThere = CLLocationCoordinate2DMake(aPlacemark.location.coordinate.latitude,aPlacemark.location.coordinate.longitude);
}
}];
}
我不确定如何从搜索显示控制器tableView中获取所选项目的距离。
请指导我如何从预测结果中选择位置时获取距离。
提前致谢。
答案 0 :(得分:0)
使用此委托方法另请阅读CoreLocation的文档。 //在iOS 3.2方法中不推荐使用 - (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
//正确的方法 - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
答案 1 :(得分:0)
以下是查找2个位置之间距离的方法。
[selectedLocation distanceFromLocation:currentLocation]