利用MapKit实现路线查询功能

0x00 利用MapKit实现路线查询功能

从天安门导航到清华西门的步行路线
效果图:

利用MapKit实现路线查询功能_第1张图片
从天安门到清华西门的步行路线

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

你可能感兴趣的:(利用MapKit实现路线查询功能)