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

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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • 爱卡,终究还是为我牺牲了 终究不会再有TA如此懂我 我今天看到了小企鹅 憨憨的,乖乖的 人世间的爱注定太过于局限 ...
    爱卡和青青的安安阅读 432评论 0 0
  • 因为学习班里要求做自我介绍的卡片,尽管很忙,但是抽空脑海总在设计属于自己的那张卡片。从寻找卡片纸开始,启动搜...
    青雪绿云阅读 288评论 1 1
  • 中英初级教育有何不同之处,对比两国的私立小学课程表就可以轻易看出,不信你看! 英国私立小学课表中文版 中国私立小学...
    上哪学阅读 797评论 0 2
  • 你那不叫心直口快 邓永娟 最近,小艳非常生气,自己的妈妈来了,和自己一起住的家婆李姨不但没有好言好语相迎,反而做出...
    邓永娟阅读 183评论 0 0