在MKMapView上绘图

我在MKMapView上绘制折线和多边形的笔记

首先,将“地图视图”拖动到“视图控制器”并添加约束。 将此地图视图拖动到视图控制器以创建@IBOutlet。

切记要使View Controller符合MKMapViewDelegate并将委托函数添加到View Controller中,如下所示:

您可以根据自己的喜好设置颜色。

现在开始绘制。 在视图控制器中添加一个保存坐标的属性

 变量点= [CLLocationCoordinate2D]() 

在本教程中,将isUserInteractionEnabled设置为false,以便不会拖动地图。

  @IBOutlet弱var mapView:MKMapView! 
覆盖func viewDidLoad(){
  super.viewDidLoad() 
  mapView.isUserInteractionEnabled = false 
  } 

现在我们需要重写touchesBegan函数:

 覆盖func touchesBegan(_ touches:Set ,事件:UIEvent?){ 
  mapView.removeOverlays(mapView.overlays) 
 如果让touch = touches.first { 
 让坐标= mapView.convert(touch.location(in:mapView),toCoordinateFrom:mapView) 
  points.append(坐标) 
  } 
  } 

上面的代码在“地图视图”上检测触摸位置并进行隐式协调。 然后,将该坐标添加到点数组。

覆盖函数touchesMoved获取路径上的每个点:

 覆盖func touchesMoved(_ touches:Set ,事件:UIEvent?){ 
 如果让touch = touches.first { 
 让坐标= mapView.convert(touch.location(in:mapView),toCoordinateFrom:mapView) 
  points.append(坐标) 
 让折线= MKPolyline(坐标:点,计数:points.count) 
  mapView.add(折线) 
  } 

最后,用MKPolygon完成绘图以突出显示选择区域。

 覆盖func touchesEnded(_ touches:Set ,事件:UIEvent?){ 
 让多边形= MKPolygon(坐标:&points,count:points.count) 
  mapView.add(多边形) 
  points = [] //重置点 
  } 

完整代码: