swift地图定位(十八)发送网络请求给苹果服务器获取导航路线并解析和绘制到MKMapView
2016-11-15 23:25
537 查看
import UIKit import MapKit class ViewController: UIViewController { @IBOutlet weak var mapView: MKMapView! lazy var geoCoder: CLGeocoder = { return CLGeocoder() }() override func viewDidLoad() { super.viewDidLoad() mapView.delegate = self } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { geoCoder.geocodeAddressString("上海") { (pls: [CLPlacemark]?, error:Error?) -> Void in let shPL = pls?.first let shCircle = MKCircle(center: (shPL?.location?.coordinate)!, radius: 50000) self.mapView.add(shCircle) self.geoCoder.geocodeAddressString("北京") { (pls: [CLPlacemark]?, error:Error?) -> Void in let bjPL = pls?.first let bjCircle = MKCircle(center: (bjPL?.location?.coordinate)!, radius: 50000) self.mapView.add(bjCircle) self.getRouteMessage(shPL!, endCLPL: bjPL!) } } } func getRouteMessage(_ startCLPL: CLPlacemark, endCLPL: CLPlacemark) { let request: MKDirectionsRequest = MKDirectionsRequest() let sourceMKPL: MKPlacemark = MKPlacemark(placemark: startCLPL) request.source = MKMapItem(placemark: sourceMKPL) let destinationMKPL: MKPlacemark = MKPlacemark(placemark: endCLPL) request.destination = MKMapItem(placemark: destinationMKPL) let directions: MKDirections = MKDirections(request: request) directions.calculate { (response: MKDirectionsResponse?, error: Error?) 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)//G2京沪高速 1304493.0 56547.0 // 当我们添加一个覆盖层数据模型时, 系统绘自动查找对应的代理方法, 找到对应的覆盖层"视图" self.mapView.add(route.polyline) for step in route.steps {// MKRouteStep print(">\(step.instructions)") } } } } } } extension ViewController: MKMapViewDelegate { /** 当添加一个覆盖层数据模型到地图上时, 地图会调用这个方法, 查找对应的覆盖层"视图"(渲染图层) - parameter mapView: 地图 - parameter overlay: 覆盖层"数据模型" - returns: 覆盖层视图 */ func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { // 不同的覆盖层数据模型, 对应不同的覆盖层视图来显示 var resultRender = MKOverlayRenderer() if overlay.isKind(of: MKPolyline.self) { let render: MKPolylineRenderer = MKPolylineRenderer(overlay: overlay) render.lineWidth = 3 render.strokeColor = UIColor.red resultRender = render } else if overlay.isKind(of: MKCircle.self) { let circleRender: MKCircleRenderer = MKCircleRenderer(overlay: overlay) circleRender.fillColor = UIColor.cyan circleRender.alpha = 0.1 resultRender = circleRender } return resultRender } }
相关文章推荐
- (八十二)利用苹果服务器获取导航信息和绘制路径
- (八十二)利用苹果服务器获取导航信息和绘制路径
- Android 发送网络请求 服务器获取验证码并自动填写
- Android定位&地图&导航——基于百度地图移动获取位置和自动定位
- iOS开发----地图与导航--定位和位置信息获取
- 105 获取路线信息和绘制导航线
- Swift 网络请求数据,并解析
- 分页查询产品信息案例;第一步:创建产品页面,向服务器发送请求(获取所有产品信息)
- Flutter学习之旅(五)----网络请求获取数据、解析数据和显示等待动画
- Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等
- JS 借助 pako.js 实现网络请求获取 gzip 数据流并解析, 解决汉字乱码
- 网络编程(发送get和post请求到服务器端,并获取响应)
- Swift 网络请求数据与解析
- Swift网络请求于数据解析简单封装
- 【iOS】7.4 定位服务->3.2 地图框架MapKit 功能2:路线规划(导航)
- Android开机启动监听网络连接状态后发送连接服务器请求
- Swift 2.0 异步网络请求从网页获取json,并转化为NSArray,遍历得到其中数据.
- Lunix网络编程之socket(客户端发送请求,服务器处理例如:排序,两人联机五子棋)
- html请求服务器xml文件并解析,获取子节点的属性值
- html5实现地图上定位导航路线