1.获取导航路线信息
// 根据两个地标,向苹果服务器请求对应的行走路线信息
func getRouteMessage(startCLPL: CLPlacemark, endCLPL: CLPlacemark) {
// 请求导航路线数据信息
let request: MKDirectionsRequest = MKDirectionsRequest()
// 创建起点和终点
let sourceMKPL: MKPlacemark = MKPlacemark(placemark: startCLPL)
request.source = MKMapItem(placemark: sourceMKPL)
let endMKPL: MKPlacemark = MKPlacemark(placemark: endCLPL)
request.destination = MKMapItem(placemark: endMKPL)
// 创建导航对象
let directions: MKDirections = MKDirections(request: request)
// 调用一个方法, 开始发送请求
directions.calculateDirectionsWithCompletionHandler { (response: MKDirectionsResponse?, error: NSError?) -> Void in
if error == nil {
print(response)
//MKDirectionsResponse
//routes: [MKRoute]
// MKRoute
// name: 路线名称
// advisoryNotices: [String] : 提示信息
// distance: CLLocationDistance 长度
// expectedTravelTime: NSTimeInterval: 预计到达时间段
// transportType : 行走方式(步行, 驾驶, 公交)
// polyline: MKPolyline: 导航路线对应的数据模型
// steps: [MKRouteStep]: 每一步该怎么走
// MKRouteStep
// instructions: String : 行走提示: 前方路口左转
// notice: 警告信息
// distance : 每一节路线的长度距离
// transportType: 每一路的交通方式
for route in (response?.routes)! {
// MKRoute
print(route.advisoryNotices)
print(route.name, route.distance, route.expectedTravelTime)
// 添加覆盖层数据模型
// 当我们添加一个覆盖层数据模型时, 系统绘自动查找对应的代理方法, 找到对应的覆盖层"视图"
self.mapView.addOverlay(route.polyline)
for step in route.steps {
// MKRouteStep
print(step.instructions)
}
}
}
}
}
extension ViewController: MKMapViewDelegate {
/**
当添加一个覆盖层数据模型到地图上时, 地图会调用这个方法, 查找对应的覆盖层"视图"(渲染图层)
- parameter mapView: ditu
- parameter overlay: 覆盖层"数据模型"
- returns: 覆盖层视图
*/
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
// 不同的覆盖层数据模型, 对应不同的覆盖层视图来显示
let render: MKPolylineRenderer = MKPolylineRenderer(overlay: overlay)
// 设置线宽
render.lineWidth = 1
// 设置颜色
render.strokeColor = UIColor.yellowColor()
return render
}
}