Swift MapKit - 创建一个多边形

Posted

技术标签:

【中文标题】Swift MapKit - 创建一个多边形【英文标题】:Swift MapKit - create a polygon 【发布时间】:2017-07-11 15:33:00 【问题描述】:

我正在尝试在我的地图上创建一个多边形来显示边界。但是当我运行我的应用程序时,什么都没有出现。我可以看到地图但看不到多边形我的错误是什么?谢谢。

import UIKit    
import MapKit    
import CoreLocation

class MapScreen : UIViewController 

    @IBOutlet var mapView: MKMapView!

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        mapView.delegate = self as! MKMapViewDelegate

        // center the location on the screen
        var location = CLLocationCoordinate2DMake(41.308792, -72.928641)
        var span = MKCoordinateSpanMake(0.01, 0.01)
        var region = MKCoordinateRegionMake(location, span)
        mapView.setRegion(region, animated: true)

        //calling the method
        addBoundry()


    

    func addBoundry() //creation of a polygon

        var points = [CLLocationCoordinate2DMake(41.311674, -72.925506),
                      CLLocationCoordinate2DMake(41.307308, -72.928694),
                      CLLocationCoordinate2DMake(41.307108, -72.928324),
                      CLLocationCoordinate2DMake(41.307892, -72.930285),
                      CLLocationCoordinate2DMake(41.307892, -72.931223),
                      CLLocationCoordinate2DMake(41.307227, -72.932494),
                      CLLocationCoordinate2DMake(41.308452, -72.931663),
                      CLLocationCoordinate2DMake(41.308730, -72.932773),
                      CLLocationCoordinate2DMake(41.308496, -72.931614),
                      CLLocationCoordinate2DMake(41.308496, -72.931614),
                      CLLocationCoordinate2DMake(41.311288, -72.931630),
                      CLLocationCoordinate2DMake(41.311659, -72.930945),
                      CLLocationCoordinate2DMake(41.312893, -72.932153),
                      CLLocationCoordinate2DMake(41.313433, -72.930542),
                      CLLocationCoordinate2DMake(41.313324, -72.929963),
                      CLLocationCoordinate2DMake(41.312758, -72.929027),
                      CLLocationCoordinate2DMake(41.312373, -72.927167),
                      CLLocationCoordinate2DMake(41.311674, -72.925506)]

        let polygon = MKPolygon(coordinates: &points, count: points.count)

        mapView.add(polygon)
    

    func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! 
        if overlay is MKPolygon 
            let polygonView = MKPolygonRenderer(overlay: overlay)
            polygonView.fillColor = UIColor(red: 0, green: 0.847, blue: 1, alpha: 0.25)

            return polygonView
        
        return nil    
    

【问题讨论】:

您似乎在要求某人为您编写一些代码。 Stack Overflow 是一个问答网站,而不是代码编写服务。请see here学习如何写出有效的问题。 【参考方案1】:

您对mapView(_:rendererFor:) 的签名不正确。在 Swift 3 中,它将是:

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


如果您正式声明遵守MKMapViewDelegate 之类的协议,它通常会警告您这些事情。例如,最佳实践是在类扩展中而不是在类定义本身中这样做:

extension MapScreen: MKMapViewDelegate 

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


顺便说一句,如果你这样做,你不仅会收到关于协议一致性的警告,而且你在设置delegate时也不需要强制转换它:

mapView.delegate = self

【讨论】:

这对我有用 .. 但是我们可以进一步改进地图缩放以适​​应多边形的大小吗? 对,但我需要手动放大到那个多边形,在我的场景中,我有不同形状和大小的多边形(比如甚至可以覆盖整个城市或某些小地方的区域)需要在地图上显示。那么有没有一种方法可以让我不管形状和大小都自动居中调整多边形?我还尝试根据较小的区域为缩放部分设置静态参数,但这对较大的多边形没有帮助,反之亦然。尝试“setVisibleMapRect”也没有运气。我昨天在这里发布了这个问题***.com/q/58707909/5255016

以上是关于Swift MapKit - 创建一个多边形的主要内容,如果未能解决你的问题,请参考以下文章

在 MapKit 中的多边形中心添加标签

在 iOS MapKit 中,如何在地图旋转时为注释设置动画?

如何向 MKPolyline 和 MKPolygon 添加描述?

使用 Swift 在 MapView 上绘制多边形

Swift 中的低级动画

Swift中非常慢的扫雷递归算法