使用CLLocation计算两个坐标之间的距离

5 cocoa-touch cllocation ios ios7

我正在使用CLLocationDistance两点之间的距离,但是当我在其中传递当前位置时我收到错误.

CLLocation *current = [[CLLocation alloc] initWithLatitude:startLocation.coordinate.latitude longitude:startLocation.coordinate.longitude];
CLLocation *itemLoc = [[CLLocation alloc] initWithLatitude:[[[getName objectAtIndex:indexPath.row] objectForKey:@"lat"] doubleValue] longitude:[[[getName objectAtIndex:indexPath.row] objectForKey:@"lon"] doubleValue]];

//Here the current location gives me an error "Initializing cllocation with an expression incompatible format"
CLLocationDistance *itemDist = [itemLoc distanceFromLocation:current];
NSLog(@"Distance: %@", itemDist);
Run Code Online (Sandbox Code Playgroud)

小智 5

你得到的错误实际上是:

使用不兼容类型“CLLocationDistance”(又名“double”)的表达式初始化“CLLocationDistance *”(又名“double *”)

它的意思是你正在初始化itemDist(你已经声明为 a CLLocationDistance *)到返回 a CLLocationDistance(注意没有星号)的东西。

CLLocationDistance不是一个对象。
它只是一个原始类型(特别是double- 请参阅核心位置数据类型参考)。


因此,与其声明itemDist指向a 的指针,不如将其CLLocationDistance声明为 a CLLocationDistance(无星号):

CLLocationDistance itemDist = [itemLoc distanceFromLocation:current];
Run Code Online (Sandbox Code Playgroud)

您还需要更新NSLog以期望精度而不是对象,否则它会在运行时崩溃:

NSLog(@"Distance: %f", itemDist);
Run Code Online (Sandbox Code Playgroud)


Jav*_*ría 5

swift 2.0是否采用以下方式:

let userLocation:CLLocation = CLLocation(latitude: 11.11, longitude: 22.22)
let priceLocation:CLLocation = CLLocation(latitude: 33.33, longitude: 44.44)
let meters:CLLocationDistance = userLocation.distanceFromLocation(priceLocation)
Run Code Online (Sandbox Code Playgroud)