如何从iOS中的Localsearch(搜索栏)计算当前位置与所选位置/目标之间的距离

时间:2015-02-06 21:03:24

标签: ios objective-c location tableview geocoding

基本上我使用了与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中获取所选项目的距离。

请指导我如何从预测结果中选择位置时获取距离。

提前致谢。

2 个答案:

答案 0 :(得分:0)

使用此委托方法另请阅读CoreLocation的文档。 //在iOS 3.2方法中不推荐使用 - (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

//正确的方法 - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

答案 1 :(得分:0)

以下是查找2个位置之间距离的方法。

[selectedLocation distanceFromLocation:currentLocation]