0x00 利用MapKit實現路線查詢功能
從天安門導航到清華西門的步行路線
效果圖:
從天安門到清華西門的步行路線
0x01 思路
蘋果的MapKit提供了查詢兩個地點間路線的的功能, 可以向地圖服務器發送一個請求, 獲得路線.
輸入參數主要有:
起點, 一個MKMapItem對象
終點, 一個MKMapItem對象
交通方式: MKDirectionsTransportType, 包括步行, 公交, 駕車
蘋果返回的結果主要有:
路線: 一個MKPolyline對象
相關API
- MKDirections
- MKDirectionsRequest
展示
利用MKMapView展示路線
0x02 代碼實現
//
// 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導航請求=MKDirectionsRequest()
//步行
req導航請求.transportType=MKDirectionsTransportType.Walking
//從天安門出發
let place天安門=MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude:39.915112 , longitude: 116.403963), addressDictionary: ["name":"天安門"]))
req導航請求.source=place天安門
//到清華大學
let place清華大學=MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: 40.003656, longitude: 116.321781), addressDictionary: ["name":"清華大學西門"]))
req導航請求.destination=place清華大學
//發送導航請求
let direction導航=MKDirections(request: req導航請求)
mapView.setRegion(MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2D(latitude: 40.003656, longitude: 116.321781), 20000, 20000), animated: false)
direction導航.calculateDirectionsWithCompletionHandler { (res查詢結果:MKDirectionsResponse?, error:NSError?) -> Void in
if let polyline=res查詢結果?.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 參考和工具
- 文檔: 蘋果定位和地圖編程指南
- 天安門和清華西門坐標: 百度地圖坐標拾取器
- 代碼編寫: Xcode 7.1
- 圖片截圖: command+shift+4