我使用以下代码计算应用用户位置和附近位置(注释)之间的距离。当我试图显示"远离"作为标签中的文字,它一直说计算的距离是0.这是为什么?
*请注意,我的表格使用MapView上的坐标来确定距离。
这是我用来计算用户到附近位置的距离的代码
MapViewController.m
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
for (MapViewAnnotation *annotation in self.mapView.annotations) {
CLLocationCoordinate2D coord = [annotation coordinate];
CLLocation *annotationLocation = [[CLLocation alloc] initWithLatitude:coord.latitude longitude:coord.longitude];
annotation.distance = [newLocation distanceFromLocation:annotationLocation];
}
这就是我用来在标签中显示计算的距离(位于我的自定义单元格中以显示在桌面视图中):
ViewController.m
cell.distanceLabel.text = [NSString stringWithFormat:@"%f m.", calculatedDistance];
非常感谢任何帮助!
答案 0 :(得分:1)
for (MapViewAnnotation *annotation in self.mapView.annotations) {
CLLocationCoordinate2D coord = [annotation coordinate];
CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:coord.latitude longitude:coord.longitude];
这不是用户的位置,而是注释的位置。但奇怪的变量名称除外:
CLLocationDistance calculatedDistance = [userLocation distanceFromLocation:userLocation];
从某个位置到其自身的距离为0. 该行可能是一个错误。也许您的意思
CLLocationDistance calculatedDistance = [newLocation distanceFromLocation:userLocation];
会返回用户新位置与(错误名称)注释位置之间的距离 - 可能是您想要的。当然,你实际上只计算了距离自我计算之上的那一行,然后将它扔掉两行。
扔掉最后两行,它们没用。