使用mapkit确定距离

时间:2010-03-10 01:57:54

标签: iphone cocoa-touch mapkit

如何使用mapkit确定1000英尺或1/2英里的距离?从某个引脚的半径或两个引脚之间的距离。

例如,我将地图集中在引脚A上。引脚B,C和D也位于地图上,与引脚A的距离不同.B和C距离A不到1/2英里,但D距离1英里。 。我想知道B和C距离A不到1/2英里。我怎么能算出来?

3 个答案:

答案 0 :(得分:13)

由于你已经说过两个不同的点是“引脚”,我假设你正在使用MKPinAnnotationView(或其他一些注释视图)。如果没有,你将不得不以其他方式获得该位置。

如果你有指向这些位置的注释对象的指针,那么你可以轻松地在它们上面调用-coordinate,从这些坐标创建CLLocations(使用-initWithLatitude:longitude:),然后使用方法{{1以米为单位检索距离。从那里,它很容易转换为英里。总而言之,代码看起来像这样:

-getDistanceFrom

你最终会以英里为距离,并可以从那里进行比较。希望这会有所帮助。

答案 1 :(得分:12)

getDistanceFrom现已弃用,因此对于任何想要这样做的人来说,这是另一种选择。

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate];
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude];  

CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate];
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude];  

float distanceMeters = [pointALocation distanceFromLocation:pointBLocation];
float distanceMiles = (distanceMeters / 1609.344);  

[pointALocation release];
[pointBLocation release];  

如上所述,您可以使用float而不是double,如果您不需要float的精度,则可以将结果转换为int:

int distanceCastToInt = (int) [pointALocation distanceFromLocation:pointBLocation];

如果你想在注释中大致了解距离,那么int就很方便了:

pointAAnnotation.title = @"Point A";
pointAAnnotation.subtitle = [NSString stringWithFormat: @"Distance: %im",distanceCastToInt];

注释的副标题例如为“距离:50米”。

答案 2 :(得分:0)

这是Swift 3相当于给定答案:

let pointACoordinate = pointAAnnotation.coordinate
let pointALocation = CLLocation(latitude: pointACoordinate.latitude, longitude: pointACoordinate.longitude)
let pointBCoordinate = pointBAnnotation.coordinate
let pointBLocation = CLLocation(latitude: pointBCoordinate.latitude, longitude: pointBCoordinate.longitude)
let distanceMeters = pointALocation.distance(from: pointBLocation)
let distanceMiles = (distanceMeters / 1609.344)