博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift 使用mapkit 实现在地图上两点(多点)画线,画多条·多种颜色的线
阅读量:3938 次
发布时间:2019-05-23

本文共 4435 字,大约阅读时间需要 14 分钟。

Swift 使用mapkit 实现在地图上两点(多点)画线,画多条·多种颜色的线

最终效果图:

在这里插入图片描述

  • 首先新建一个项目(可选)
  • 在storyboard中新建一个ViewController视图
  • 然后新建一个UIViewController的之类并且在storyboard中和ViewController视图进行绑定:
    在这里插入图片描述
  • 在视图中,从视图库添加一个MKMapview到视图中。然后拉扯到你想要的大小,设定约束,可以使用约束让它涨满整个view
  • 打开 assitant 窗口,按住ctrl+鼠标左键,拖拽MKMapview带代码区域: @IBOutlet var mapView: MKMapView!//名字可以随意,最好和我一样,之后都是使用mapView
  • 在文件开头,import MapKit
  • MapViewContrller需要实现MKMapViewDelegate协议,采用拓展的方式,这里一并贴上绘图的函数:
extension MapViewController:MKMapViewDelegate{
// 渲染overlay的函数 func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
//画出两条线: let routeLineView = MKPolylineRenderer(overlay: overlay) routeLineView.lineWidth = 4.0 if overlay is MKPolyline{
if overlay.title == "one"{
routeLineView.strokeColor = UIColor.red }else if overlay.title == "two" {
routeLineView.strokeColor = UIColor.green } } return routeLineView }
// 准备数据,添加数据:import UIKitimport MapKitclass MapViewController: UIViewController {
@IBOutlet var mapView: MKMapView! override func viewDidLoad() {
super.viewDidLoad() // 1.在ViewController实现MKMapViewDelegate协议的委托 mapView.delegate = self //2.设置位置的纬度和经度 let sourceLocation = CLLocationCoordinate2D(latitude: 40.759011, longitude: -73.984472) let destinationLocation = CLLocationCoordinate2D(latitude: 40.748441, longitude: -73.985564) // 3.创建包含位置坐标的地标对象 let sourcePlacemark = MKPlacemark(coordinate: sourceLocation, addressDictionary: nil) let destinationPlacemark = MKPlacemark(coordinate: destinationLocation, addressDictionary: nil) // 4.MKMapitems用于路线的绘制。 此类封装有关地图上特定点的信息 let sourceMapItem = MKMapItem(placemark: sourcePlacemark) let destinationMapItem = MKMapItem(placemark: destinationPlacemark) // 5. 添加注释,显示地标的名称 let sourceAnnotation = MKPointAnnotation() sourceAnnotation.title = "Times Square" // 如果地标对象的坐标存在,就给MK点解释对象指点坐标 if let location = sourcePlacemark.location {
sourceAnnotation.coordinate = location.coordinate } let destinationAnnotation = MKPointAnnotation() destinationAnnotation.title = "Empire State Building" if let location = destinationPlacemark.location {
destinationAnnotation.coordinate = location.coordinate } // 6.标记注释显示在地图上 self.mapView.showAnnotations([sourceAnnotation,destinationAnnotation], animated: true ) // 7. MKDirectionsRequest类用于计算路线。折线 let directionRequest = MKDirections.Request() directionRequest.source = sourceMapItem directionRequest.destination = destinationMapItem directionRequest.transportType = .automobile // Calculate the direction let directions = MKDirections(request: directionRequest) // 8.将使用折线作为地图顶部的叠加视图绘制路线。区域设置为两个位置都可见 directions.calculate {
(response, error) -> Void in guard let response = response else {
if let error = error {
print("Error: \(error)") } return } let route = response.routes[0] print("111") route.polyline.title = "one" self.mapView.addOverlay((route.polyline), level: MKOverlayLevel.aboveRoads) let rect = route.polyline.boundingMapRect self.mapView.setRegion(MKCoordinateRegion(rect), animated: true) } // 添加两个点直接相连的斜线 let routeLine = MKPolyline(coordinates: [sourceLocation,destinationLocation], count: 2) routeLine.title = "two" self.mapView.addOverlay(routeLine) let rect1 = routeLine.boundingMapRect self.mapView.setRegion(MKCoordinateRegion(rect1), animated: true) }

自定义点的样式:

// 自定义标记的样式:    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil } else {
let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "annotationView") ?? MKAnnotationView() annotationView.image = UIImage(systemName: "hare.fill")// annotationView.annotation. return annotationView } }

如果有什么不太明白的地方,可以留言一起探讨

转载地址:http://djywi.baihongyu.com/

你可能感兴趣的文章
项目整体管理(二)
查看>>
推荐阅读书籍
查看>>
外包管理
查看>>
项目管理师职业道德规范
查看>>
战略管理概述
查看>>
业务流程管理和重组
查看>>
知识管理
查看>>
项目整体绩效评估
查看>>
信息安全系统和安全体系
查看>>
信息系统安全风险识别与评估
查看>>
Java跨平台的构思分析
查看>>
linux目录结构名称对照
查看>>
设计的理念
查看>>
什么是统计学中的 Standard Error ( SE )?
查看>>
[数据挖掘与预测分析] 单变量统计分析思考问题
查看>>
[统计学笔记] (十三)指数分析(2)
查看>>
Data Science 到底是什么?
查看>>
统计学、统计学习和统计推断之间的关系
查看>>
PMP笔记:质量管理的七个工具
查看>>
悦读:重新定义公司-谷歌是如何运营的
查看>>