使用 Swift 在 MapView 上绘制多边形

Posted

技术标签:

【中文标题】使用 Swift 在 MapView 上绘制多边形【英文标题】:Draw polygon on MapView using Swift 【发布时间】:2019-10-08 21:20:13 【问题描述】:

我有一个MKMapView,还有一组我想用多边形连接起来绘制一个矩形的坐标。下面是我开始使用的代码。

import UIKit
import MapKit

class mapViewViewController: UIViewController 
    @IBOutlet var map: MKMapView!


    override func viewDidLoad() 
        super.viewDidLoad()
        map?.delegate=self


        let startingPoint1 = ...

        let startingPoint2 = ...


        let endingPoint1 = ...

        let endingPoint2 = ...

        var coordinateInput:[CLLocationCoordinate2D]=[startingPoint1,startingPoint2,endingPoint1,endingPoint2]


        let line = MKPolygon(coordinates:&coordinateInput, count:4)

        map.addOverlay(line)


    


extension mapViewViewController: MKMapViewDelegate

    func map(_ map: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer

        if overlay is MKPolygon

            let renderer = MKPolygonRenderer(polygon: overlay as! MKPolygon)
            renderer.fillColor=UIColor.red.withAlphaComponent(0.5)
            renderer.strokeColor=UIColor.orange
            renderer.lineWidth=4
            return renderer
        

        return MKOverlayRenderer()
    


我遇到的问题是,当我启动地图视图时,地图顶部没有按预期显示任何内容。我已经确认我的所有坐标都是有效的,并且是我想要的,但是我当前的设置并没有像我预期的那样在地图上绘制。实现此目的的正确方法是什么?

【问题讨论】:

【参考方案1】:

rendererFor 的签名不正确。在您的方法中添加断点或日志语句,您将看到它没有被调用。

正确的签名是:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer  ... 

【讨论】:

以上是关于使用 Swift 在 MapView 上绘制多边形的主要内容,如果未能解决你的问题,请参考以下文章

如何在不连接它们的情况下在 MapView 上绘制两个 MKPolygons?

如何自动缩放mapView以显示覆盖

是否可以在 ios 的 mapView 上集群 MKPolygon

MKPolygon Swift 没有出现

如何在 MKMapSnapshotter 上绘制 CLLocationCoordinate2Ds(在 mapView 打印图像上绘制)

在 MapView 上绘制 MKPolyline 显示两个位置之间的直线