在MKMapView中测量距离绘制路线的距离(以米为单位)

时间:2014-05-09 19:10:21

标签: ios objective-c mkmapview

如何计算MKMapView中两个坐标之间的路线距离?我不是要求直线距离,而是要求转弯路线的距离。

2 个答案:

答案 0 :(得分:12)

我假设您正在使用MKDirectionsRequest获取MKDirectionsResponse,您可以从中获取路线。例如:

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];

// source and destination are the relevant MKMapItem's
request.source = source;
request.destination = destination;

// Specify the transportation type
request.transportType = MKDirectionsTransportTypeAutomobile;

// If you're open to getting more than one route, requestsAlternateRoutes = YES; else requestsAlternateRoutes = NO;
request.requestsAlternateRoutes = YES;

MKDirections *directions = [[MKDirections alloc] initWithRequest:request];

[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {

    if (!error) {
        self.directionsResponse = response;                           
    }
}];

获得MKDirectionsResponse(在本例中为self.directionsResponse)并根据该响应确定特定路线索引后,可以找到该路线的CLLocationDistance(以米为单位)使用:

MKRoute *route = self.directionsResponse.routes[currentRoute];
CLLocationDistance distance = route.distance;

如果你不知道你想要使用哪条特定路线 - 例如如果你想根据距离决定一条路线 - 你可以通过一个循环来遍历directionsResponse.route数组,以获得所有的路线距离。

编辑:此外,如果您想要找到时间距离(以秒为单位),您可以使用:

NSTimeInterval seconds = route.expectedTravelTime;

在斯威夫特:

let request:MKDirectionsRequest = MKDirectionsRequest()

// source and destination are the relevant MKMapItems
request.setSource(source)
request.setDestination(destination)

// Specify the transportation type
request.transportType = MKDirectionsTransportType.Automobile;

// If you're open to getting more than one route, 
// requestsAlternateRoutes = true; else requestsAlternateRoutes = false;
request.requestsAlternateRoutes = true

let directions = MKDirections(request: request)

directions.calculateDirectionsWithCompletionHandler ({
    (response: MKDirectionsResponse?, error: NSError?) in

    if error == nil {
        self.directionsResponse = response
    }
})

获得距离:

let route = directionsResponse.routes[currentRoute] as MKRoute
let distance = route.distance

获得预计的旅行时间:

let seconds = route.expectedTravelTime

答案 1 :(得分:0)

iOS 7引入了基于方向的API,称为MKDirections API,这有助于您可以在应用程序中使用基于根的方向数据。有关MKDirection API的更多文档,请参阅以下链接

MKDirection API