州地标对象
let gzPL = pls?.first
// 1.2 创建圆形的覆盖层数据模型
let circle1 = MKCircle(center: (gzPL?.location?.coordinate)!, radius: 100000)
// 1.3 添加覆盖层数据模型到地图上
self.mapView.add(circle1)
self.geoCoder.geocodeAddressString("上海") { (pls: [CLPlacemark]?, error) -> Void in
// 2. 拿到上海地标对象
let shPL = pls?.first
// 2.2 创建圆形的覆盖层数据模型
let circle2 = MKCircle(center: (shPL?.location?.coordinate)!, radius: 100000)
// 2.3 添加覆盖层数据模型到地图上
self.mapView.add(circle2)
// 3. 调用获取导航线路数据信息的方法
self.getRouteMessage(gzPL!, endCLPL: shPL!)
}
}
}
// MARK: - ① 根据两个地标,发送网络请求给苹果服务器获取导航数据,请求对应的行走路线信息
func getRouteMessage(_ startCLPL: CLPlacemark, endCLPL: CLPlacemark) {
// 创建请求导航路线数据信息
let request: MKDirectionsRequest = MKDirectionsRequest()
// 创建起点:根据 CLPlacemark 地标对象创建 MKPlacemark 地标对象
let sourceMKPL: MKPlacemark = MKPlacemark(placemark: startCLPL)
request.source = MKMapItem(placemark: sourceMKPL)
// 创建终点:根据 CLPlacemark 地标对象创建 MKPlacemark 地标对象
let endMKPL: MKPlacemark = MKPlacemark(placemark: endCLPL)
request.destination = MKMapItem(placemark: endMKPL)
// 1. 创建导航对象,根据请求,获取实际路线信息
let directions: MKDirections = MKDirections(request: request)
// 2. 调用方法, 开始发送请求,计算路线信息
directions.calculate { (response:MKDirectionsResponse?, error:Error?) in
if error == nil {
print(response)
// MARK: - ② 解析导航数据
// 遍历 routes (MKRoute对象):因为有多种路线
for route in (response?.routes)! {
print(route.advisoryNotices)
print(route.name, route.distance |