0x00 利用MapKit實(shí)現(xiàn)路線查詢功能
從天安門(mén)導(dǎo)航到清華西門(mén)的步行路線
效果圖:
從天安門(mén)到清華西門(mén)的步行路線
0x01 思路
蘋(píng)果的MapKit提供了查詢兩個(gè)地點(diǎn)間路線的的功能, 可以向地圖服務(wù)器發(fā)送一個(gè)請(qǐng)求, 獲得路線.
輸入?yún)?shù)主要有:
起點(diǎn), 一個(gè)MKMapItem對(duì)象
終點(diǎn), 一個(gè)MKMapItem對(duì)象
交通方式: MKDirectionsTransportType, 包括步行, 公交, 駕車(chē)
蘋(píng)果返回的結(jié)果主要有:
路線: 一個(gè)MKPolyline對(duì)象
相關(guān)API
- MKDirections
- MKDirectionsRequest
展示
利用MKMapView展示路線
0x02 代碼實(shí)現(xiàn)
//
// ViewController.swift
//
import UIKit
import MapKit
class ViewController: UIViewController,MKMapViewDelegate {
//MARK: - IB
@IBOutlet weak var mapView: MKMapView!
//MARK: - ViewLifeCircle
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let req導(dǎo)航請(qǐng)求=MKDirectionsRequest()
//步行
req導(dǎo)航請(qǐng)求.transportType=MKDirectionsTransportType.Walking
//從天安門(mén)出發(fā)
let place天安門(mén)=MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude:39.915112 , longitude: 116.403963), addressDictionary: ["name":"天安門(mén)"]))
req導(dǎo)航請(qǐng)求.source=place天安門(mén)
//到清華大學(xué)
let place清華大學(xué)=MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: 40.003656, longitude: 116.321781), addressDictionary: ["name":"清華大學(xué)西門(mén)"]))
req導(dǎo)航請(qǐng)求.destination=place清華大學(xué)
//發(fā)送導(dǎo)航請(qǐng)求
let direction導(dǎo)航=MKDirections(request: req導(dǎo)航請(qǐng)求)
mapView.setRegion(MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2D(latitude: 40.003656, longitude: 116.321781), 20000, 20000), animated: false)
direction導(dǎo)航.calculateDirectionsWithCompletionHandler { (res查詢結(jié)果:MKDirectionsResponse?, error:NSError?) -> Void in
if let polyline=res查詢結(jié)果?.routes.first?.polyline {
self.mapView.addOverlay(polyline, level: MKOverlayLevel.AboveLabels)
}
}
}
// MARK: - MapView
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
let ret=MKPolylineRenderer(overlay: overlay)
ret.lineWidth=2
ret.strokeColor=UIColor.redColor()
return ret
}
}
0x03 參考和工具
- 文檔: 蘋(píng)果定位和地圖編程指南
- 天安門(mén)和清華西門(mén)坐標(biāo): 百度地圖坐標(biāo)拾取器
- 代碼編寫(xiě): Xcode 7.1
- 圖片截圖: command+shift+4