如何使用mapkit确定1000英尺或1/2英里的距离?从某个引脚的半径或两个引脚之间的距离。
例如,我将地图集中在引脚A上。引脚B,C和D也位于地图上,与引脚A的距离不同.B和C距离A不到1/2英里,但D距离1英里。 。我想知道B和C距离A不到1/2英里。我怎么能算出来?
答案 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)