美文网首页
iOS - 导航 - 通过苹果服务器请求数据并进行地图折线和原点

iOS - 导航 - 通过苹果服务器请求数据并进行地图折线和原点

作者: child_cool | 来源:发表于2017-04-06 16:22 被阅读0次
    import UIKit
    import MapKit
    
    class ViewController: UIViewController {
    
        
        @IBOutlet weak var mapView: MKMapView!
        var geoCoder = CLGeocoder()
        
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            geoCoder.geocodeAddressString("北京") { (startCLPLS : [CLPlacemark]?,error : Error?) in
                self.geoCoder.geocodeAddressString("珠海") { (endCLPLS : [CLPlacemark]?,error : Error?) in
                    self.getNavMessage(startCLPL: (startCLPLS?.first)!, endCLPL: (endCLPLS?.first)!)
                }
            }
        }
        
        
        /// 获取导航信息
        ///
        /// - Parameters:
        ///   - startCLPL: 开始地址
        ///   - endCLPL: 结束地址
        func getNavMessage(startCLPL : CLPlacemark,endCLPL : CLPlacemark) {
            
            print("开始请求")
            
            // 添加圆形覆盖层
            let startCircle = MKCircle(center: (startCLPL.location?.coordinate)!, radius: 10000)
            let endCircle = MKCircle(center: (endCLPL.location?.coordinate)!, radius: 10000)
            mapView.add(startCircle)
            mapView.add(endCircle)
            
            let startItem = MKMapItem(placemark: MKPlacemark(placemark: startCLPL))
            let endItem = MKMapItem(placemark: MKPlacemark(placemark: endCLPL))
            
            let request = MKDirectionsRequest()
            request.source = startItem
            request.destination = endItem
            
            let directions = MKDirections(request: request)
            directions.calculate { (response : MKDirectionsResponse?, error : Error?) in
                guard (error == nil) else {
                    print(error)
                    return
                }
                
                print(response)
                /**
                 * routes: [MKRoute]
                 */
                
                /**
                 MKRoute ---
                 
                 name 路线名称
                 advisoryNotices 提示信息
                 distance 路线长度
                 expectedTravelTime 预计到达时间段
                 transportType 行走方式(步行驾驶公交)
                 polyline 导航路线对应的数据模型
                 steps 每一步应该怎么走
                 
                 MKRouteStep --
                 
                 instructions 行走提示
                 notice 警告信息
                 distance 每一节路线的长度距离
                 transportType 每一节的交通方式
                 */
                
                
                for route in (response?.routes)! {
                    print("路线名称:\(route.name),提示信息:\(route.advisoryNotices),路线长度:\(route.distance),预计到达时间段:\(route.expectedTravelTime),行走方式:\(route.transportType)\n")
                    
                    // 当我们添加一个覆盖层数据 添加折线
                    self.mapView.add(route.polyline)
                    
                    for step in route.steps {
                        print("行走提示:\(step.instructions),警告信息:\(step.notice),每一节路线的长度距离:\(step.distance),每一节的交通方式:\(step.transportType)\n")
                    }
                }
            }
            
        }
    
    }
    
    extension ViewController : MKMapViewDelegate {
        // 根据覆盖层模型更新覆盖层界面
        func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
            
            let render = MKOverlayRenderer()
            
            // 折线
            if overlay.isKind(of: MKPolyline.self) {
                let polylineRender = MKPolylineRenderer(overlay: overlay)// 折线
                polylineRender.lineWidth = 2 // 线宽
                polylineRender.strokeColor = UIColor.red // 颜色
                return polylineRender
            }
            
            // 圆形
            if overlay.isKind(of: MKCircle.self) {
                let circleRender = MKCircleRenderer(overlay: overlay)
                circleRender.fillColor = UIColor.cyan
                circleRender.alpha = 0.5
                return circleRender
            }
            
            return render
        }
    }
    
    

    打印如下:路线名称:G3京台高速,提示信息:["需要步行至目的地。", "需要过收费站。"],路线长度:2369361.0,预计到达时间段:102373.0,行走方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:路线导航开始,警告信息:nil,每一节路线的长度距离:0.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:右转进入正义路,警告信息:nil,每一节路线的长度距离:116.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:左转,朝崇文门方向进入前门东大街,警告信息:nil,每一节路线的长度距离:461.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:在崇文门西大街靠右行驶,警告信息:nil,每一节路线的长度距离:852.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:右转进入崇文门外大街,警告信息:nil,每一节路线的长度距离:133.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶,朝德贤路、南五环方向并线进入榴乡路,警告信息:nil,每一节路线的长度距离:7055.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶,朝G3、黄亦路方向并线进入德贤路,警告信息:nil,每一节路线的长度距离:5923.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝廊沧、沧州方向,驶出3号出口,警告信息:nil,每一节路线的长度距离:55104.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝德州、沧州方向,驶出182B号出口,警告信息:nil,每一节路线的长度距离:111232.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:继续前行进入G3京台高速,警告信息:nil,每一节路线的长度距离:8699.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝G3、曲阜方向,驶出470号出口,警告信息:nil,每一节路线的长度距离:270656.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝G3、曲阜方向靠左行驶,警告信息:nil,每一节路线的长度距离:16.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶并线进入G2513淮徐高速,警告信息:nil,每一节路线的长度距离:213600.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝合肥、福州方向驶出,警告信息:nil,每一节路线的长度距离:18257.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝G3、S301方向,驶出742号出口,警告信息:nil,每一节路线的长度距离:28956.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝合肥方向靠左行驶,警告信息:nil,每一节路线的长度距离:328.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:继续前行进入G3京台高速,警告信息:nil,每一节路线的长度距离:138784.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:继续前行进入G3京台高速,警告信息:nil,每一节路线的长度距离:12883.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝新桥机场、淮南方向驶出,警告信息:nil,每一节路线的长度距离:20438.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝长丰、合肥方向靠左行驶,警告信息:nil,每一节路线的长度距离:34784.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝G3、G4212方向,驶出33号出口,警告信息:nil,每一节路线的长度距离:90656.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶,朝G4212、G50方向并线进入G4212合安高速,警告信息:nil,每一节路线的长度距离:61824.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:继续前行,朝G50、潜山方向进入G50沪渝高速,警告信息:nil,每一节路线的长度距离:62240.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝G70、G105方向,驶出699号出口,警告信息:nil,每一节路线的长度距离:131520.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶并线进入G70福银高速,警告信息:nil,每一节路线的长度距离:379.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:继续前行,朝G70、九江方向进入G70福银高速,警告信息:nil,每一节路线的长度距离:26337.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶并线进入G70福银高速,警告信息:nil,每一节路线的长度距离:30412.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠右行驶并线进入G70福银高速,警告信息:nil,每一节路线的长度距离:4881.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:继续前行进入G70福银高速,警告信息:nil,每一节路线的长度距离:53504.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:继续前行进入G70福银高速,警告信息:nil,每一节路线的长度距离:22622.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶,朝G6001、南昌方向并线进入昌九高速,警告信息:nil,每一节路线的长度距离:8370.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠右行驶并线进入G60沪昆高速,警告信息:nil,每一节路线的长度距离:56000.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶,朝S69、吉安方向并线进入S69樟吉高速,警告信息:nil,每一节路线的长度距离:71872.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝大余、韶关方向,驶出57号出口,警告信息:nil,每一节路线的长度距离:289248.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:继续前行进入G6011南韶高速,警告信息:nil,每一节路线的长度距离:133472.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:驶出出口,朝广州、郴州方向并线进入G4京港澳高速,警告信息:nil,每一节路线的长度距离:47552.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝珠海方向靠左行驶,警告信息:nil,每一节路线的长度距离:253.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:靠左行驶并线进入S4华南快速,警告信息:nil,每一节路线的长度距离:188832.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:驶出30号出口,朝芳村、黄埔方向并线进入S81广州环城高速,警告信息:nil,每一节路线的长度距离:25780.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝环城高速(西行)、广佛高速方向靠右行驶,警告信息:nil,每一节路线的长度距离:632.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:驶出49号出口,朝顺德、中山方向并线进入S43广珠西线高速,警告信息:nil,每一节路线的长度距离:13132.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝S43广珠西线、顺德方向,稍向右转,警告信息:nil,每一节路线的长度距离:125.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝珠海大道、金湾方向,驶出126号出口,警告信息:nil,每一节路线的长度距离:108864.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝南屏、拱北方向靠左行驶,警告信息:nil,每一节路线的长度距离:610.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:在珠海大道,朝横琴、长隆方向靠左行驶,警告信息:nil,每一节路线的长度距离:1560.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:朝桂花南路方向靠右行驶,警告信息:nil,每一节路线的长度距离:7846.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:左转,朝迎宾南路方向进入粤海东路,警告信息:nil,每一节路线的长度距离:1182.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:在迎宾南路,朝拱北口岸方向靠右行驶,警告信息:nil,每一节路线的长度距离:309.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:调头,警告信息:nil,每一节路线的长度距离:606.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:右转进入粤华路,警告信息:nil,每一节路线的长度距离:149.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:左转,警告信息:nil,每一节路线的长度距离:86.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:左转,警告信息:nil,每一节路线的长度距离:20.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:请准备停车,警告信息:nil,每一节路线的长度距离:11.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 1)

    行走提示:右转,警告信息:nil,每一节路线的长度距离:0.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 2)

    行走提示:目的地在您右侧,警告信息:nil,每一节路线的长度距离:198.0,每一节的交通方式:MKDirectionsTransportType(rawValue: 2)

    相关文章

      网友评论

          本文标题:iOS - 导航 - 通过苹果服务器请求数据并进行地图折线和原点

          本文链接:https://www.haomeiwen.com/subject/qdeqattx.html