iOS - 導(dǎo)航 - 通過蘋果服務(wù)器請求數(shù)據(jù)并進(jìn)行地圖折線和原點繪制

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)!)
            }
        }
    }
    
    
    /// 獲取導(dǎo)航信息
    ///
    /// - Parameters:
    ///   - startCLPL: 開始地址
    ///   - endCLPL: 結(jié)束地址
    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 預(yù)計到達(dá)時間段
             transportType 行走方式(步行駕駛公交)
             polyline 導(dǎo)航路線對應(yīng)的數(shù)據(jù)模型
             steps 每一步應(yīng)該怎么走
             
             MKRouteStep --
             
             instructions 行走提示
             notice 警告信息
             distance 每一節(jié)路線的長度距離
             transportType 每一節(jié)的交通方式
             */
            
            
            for route in (response?.routes)! {
                print("路線名稱:\(route.name),提示信息:\(route.advisoryNotices),路線長度:\(route.distance),預(yù)計到達(dá)時間段:\(route.expectedTravelTime),行走方式:\(route.transportType)\n")
                
                // 當(dāng)我們添加一個覆蓋層數(shù)據(jù) 添加折線
                self.mapView.add(route.polyline)
                
                for step in route.steps {
                    print("行走提示:\(step.instructions),警告信息:\(step.notice),每一節(jié)路線的長度距離:\(step.distance),每一節(jié)的交通方式:\(step.transportType)\n")
                }
            }
        }
        
    }

}

extension ViewController : MKMapViewDelegate {
    // 根據(jù)覆蓋層模型更新覆蓋層界面
    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,預(yù)計到達(dá)時間段:102373.0,行走方式:MKDirectionsTransportType(rawValue: 1)

行走提示:路線導(dǎo)航開始,警告信息:nil,每一節(jié)路線的長度距離:0.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:右轉(zhuǎn)進(jìn)入正義路,警告信息:nil,每一節(jié)路線的長度距離:116.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:左轉(zhuǎn),朝崇文門方向進(jìn)入前門東大街,警告信息:nil,每一節(jié)路線的長度距離:461.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:在崇文門西大街靠右行駛,警告信息:nil,每一節(jié)路線的長度距離:852.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:右轉(zhuǎn)進(jìn)入崇文門外大街,警告信息:nil,每一節(jié)路線的長度距離:133.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛,朝德賢路、南五環(huán)方向并線進(jìn)入榴鄉(xiāng)路,警告信息:nil,每一節(jié)路線的長度距離:7055.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛,朝G3、黃亦路方向并線進(jìn)入德賢路,警告信息:nil,每一節(jié)路線的長度距離:5923.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝廊滄、滄州方向,駛出3號出口,警告信息:nil,每一節(jié)路線的長度距離:55104.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝德州、滄州方向,駛出182B號出口,警告信息:nil,每一節(jié)路線的長度距離:111232.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:繼續(xù)前行進(jìn)入G3京臺高速,警告信息:nil,每一節(jié)路線的長度距離:8699.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝G3、曲阜方向,駛出470號出口,警告信息:nil,每一節(jié)路線的長度距離:270656.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝G3、曲阜方向靠左行駛,警告信息:nil,每一節(jié)路線的長度距離:16.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛并線進(jìn)入G2513淮徐高速,警告信息:nil,每一節(jié)路線的長度距離:213600.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝合肥、福州方向駛出,警告信息:nil,每一節(jié)路線的長度距離:18257.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝G3、S301方向,駛出742號出口,警告信息:nil,每一節(jié)路線的長度距離:28956.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝合肥方向靠左行駛,警告信息:nil,每一節(jié)路線的長度距離:328.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:繼續(xù)前行進(jìn)入G3京臺高速,警告信息:nil,每一節(jié)路線的長度距離:138784.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:繼續(xù)前行進(jìn)入G3京臺高速,警告信息:nil,每一節(jié)路線的長度距離:12883.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝新橋機(jī)場、淮南方向駛出,警告信息:nil,每一節(jié)路線的長度距離:20438.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝長豐、合肥方向靠左行駛,警告信息:nil,每一節(jié)路線的長度距離:34784.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝G3、G4212方向,駛出33號出口,警告信息:nil,每一節(jié)路線的長度距離:90656.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛,朝G4212、G50方向并線進(jìn)入G4212合安高速,警告信息:nil,每一節(jié)路線的長度距離:61824.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:繼續(xù)前行,朝G50、潛山方向進(jìn)入G50滬渝高速,警告信息:nil,每一節(jié)路線的長度距離:62240.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝G70、G105方向,駛出699號出口,警告信息:nil,每一節(jié)路線的長度距離:131520.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛并線進(jìn)入G70福銀高速,警告信息:nil,每一節(jié)路線的長度距離:379.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:繼續(xù)前行,朝G70、九江方向進(jìn)入G70福銀高速,警告信息:nil,每一節(jié)路線的長度距離:26337.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛并線進(jìn)入G70福銀高速,警告信息:nil,每一節(jié)路線的長度距離:30412.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠右行駛并線進(jìn)入G70福銀高速,警告信息:nil,每一節(jié)路線的長度距離:4881.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:繼續(xù)前行進(jìn)入G70福銀高速,警告信息:nil,每一節(jié)路線的長度距離:53504.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:繼續(xù)前行進(jìn)入G70福銀高速,警告信息:nil,每一節(jié)路線的長度距離:22622.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛,朝G6001、南昌方向并線進(jìn)入昌九高速,警告信息:nil,每一節(jié)路線的長度距離:8370.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠右行駛并線進(jìn)入G60滬昆高速,警告信息:nil,每一節(jié)路線的長度距離:56000.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛,朝S69、吉安方向并線進(jìn)入S69樟吉高速,警告信息:nil,每一節(jié)路線的長度距離:71872.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝大余、韶關(guān)方向,駛出57號出口,警告信息:nil,每一節(jié)路線的長度距離:289248.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:繼續(xù)前行進(jìn)入G6011南韶高速,警告信息:nil,每一節(jié)路線的長度距離:133472.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:駛出出口,朝廣州、郴州方向并線進(jìn)入G4京港澳高速,警告信息:nil,每一節(jié)路線的長度距離:47552.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝珠海方向靠左行駛,警告信息:nil,每一節(jié)路線的長度距離:253.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:靠左行駛并線進(jìn)入S4華南快速,警告信息:nil,每一節(jié)路線的長度距離:188832.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:駛出30號出口,朝芳村、黃埔方向并線進(jìn)入S81廣州環(huán)城高速,警告信息:nil,每一節(jié)路線的長度距離:25780.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝環(huán)城高速(西行)、廣佛高速方向靠右行駛,警告信息:nil,每一節(jié)路線的長度距離:632.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:駛出49號出口,朝順德、中山方向并線進(jìn)入S43廣珠西線高速,警告信息:nil,每一節(jié)路線的長度距離:13132.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝S43廣珠西線、順德方向,稍向右轉(zhuǎn),警告信息:nil,每一節(jié)路線的長度距離:125.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝珠海大道、金灣方向,駛出126號出口,警告信息:nil,每一節(jié)路線的長度距離:108864.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝南屏、拱北方向靠左行駛,警告信息:nil,每一節(jié)路線的長度距離:610.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:在珠海大道,朝橫琴、長隆方向靠左行駛,警告信息:nil,每一節(jié)路線的長度距離:1560.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:朝桂花南路方向靠右行駛,警告信息:nil,每一節(jié)路線的長度距離:7846.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:左轉(zhuǎn),朝迎賓南路方向進(jìn)入粵海東路,警告信息:nil,每一節(jié)路線的長度距離:1182.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:在迎賓南路,朝拱北口岸方向靠右行駛,警告信息:nil,每一節(jié)路線的長度距離:309.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:調(diào)頭,警告信息:nil,每一節(jié)路線的長度距離:606.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:右轉(zhuǎn)進(jìn)入粵華路,警告信息:nil,每一節(jié)路線的長度距離:149.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:左轉(zhuǎn),警告信息:nil,每一節(jié)路線的長度距離:86.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:左轉(zhuǎn),警告信息:nil,每一節(jié)路線的長度距離:20.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:請準(zhǔn)備停車,警告信息:nil,每一節(jié)路線的長度距離:11.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 1)

行走提示:右轉(zhuǎn),警告信息:nil,每一節(jié)路線的長度距離:0.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 2)

行走提示:目的地在您右側(cè),警告信息:nil,每一節(jié)路線的長度距離:198.0,每一節(jié)的交通方式:MKDirectionsTransportType(rawValue: 2)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • 愛卡,終究還是為我犧牲了 終究不會再有TA如此懂我 我今天看到了小企鵝 憨憨的,乖乖的 人世間的愛注定太過于局限 ...
    愛卡和青青的安安閱讀 536評論 0 0
  • 因為學(xué)習(xí)班里要求做自我介紹的卡片,盡管很忙,但是抽空腦海總在設(shè)計屬于自己的那張卡片。從尋找卡片紙開始,啟動搜...
    青雪綠云閱讀 338評論 1 1
  • 中英初級教育有何不同之處,對比兩國的私立小學(xué)課程表就可以輕易看出,不信你看! 英國私立小學(xué)課表中文版 中國私立小學(xué)...
    上哪學(xué)閱讀 843評論 0 2
  • 你那不叫心直口快 鄧永娟 最近,小艷非常生氣,自己的媽媽來了,和自己一起住的家婆李姨不但沒有好言好語相迎,反而做出...
    鄧永娟閱讀 218評論 0 0

友情鏈接更多精彩內(nèi)容