swift: как нарисовать дугу на карте с помощью MapKit?

#ios #swift #mapkit #uibezierpath

#iOS #swift #mapkit #uibezierpath

Вопрос:

Я должен нарисовать дугу, имеющую два угла, центральную точку и радиус в качестве входных данных. Я использую UIBezierPath, но наложение не добавляется на карту. Вот мой код:

 func calculateByArc()
    {
        let startingAzimuth = Double(upperLimitTextBox.text!)
        let endingAzimuth = Double(upperLimitUomTextBox.text!)
        let radius = Double(lowerLimitTextBox.text!)
        let latitude = Double(lowerLimitUomTextBox.text!)
        let longitude = Double(textField5.text!)
        let clockwise = clockwiseSwitch.isOn ? true : false
        let qwe = CLLocationCoordinate2DMake(latitude!,longitude!)
        let asd = Map.convert(qwe, toPointTo: Map)
        let test = Map.convert(asd, toCoordinateFrom: Map)
        print("test lat: "   String(test.latitude))
        print("test lon: "   String(test.longitude))


        let path = UIBezierPath(arcCenter: Map.convert (qwe, toPointTo: mapController.Map), radius: CGFloat(radius!), startAngle: CGFloat(Helper.toRad(startingAzimuth!)), endAngle: CGFloat(Helper.toRad(endingAzimuth!)) , clockwise: clockwise)
        let arc = MKCircle(center: CLLocationCoordinate2DMake(latitude!, longitude!), radius: radius!)
        arc.accessibilityPath = path
        Map.add(arc)
    }
  

и мой MapView:

 func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer
    {
        if overlay is MKCircle
        {
            print("overlay latitude: " String(overlay.coordinate.latitude))
            print("overlay longitude: " String(overlay.coordinate.longitude))
            let circleOverlay = overlay as! MKCircle
            if(circleOverlay.accessibilityPath != nil)
            {
                let arcRenderer = MKOverlayPathRenderer()
                arcRenderer.path = circleOverlay.accessibilityPath?.cgPath
                arcRenderer.strokeColor = UIColor.red
                arcRenderer.lineWidth = 10
                arcRenderer.alpha = 0.3
                return arcRenderer
            }
            let circle = MKCircleRenderer(overlay: overlay)
            circle.strokeColor = UIColor.black
            circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.1)
            circle.lineWidth = 1
            circle.alpha = 0.3
            return circle
        }
}
  

Я думаю, это потому, что я неправильно конвертирую CLLocationCoordinate2D CGPoint , потому что пару недель назад мне удалось нарисовать дугу, но с неправильными координатами (не помню, как я это сделал).

Ответ №1:

Это то, что вы ищете http://nshipster.com/mkgeodesicpolyline / ?

Комментарии:

1. Нет, но это может быть полезно) Мне нужно нарисовать дугу, ввести центр, радиус, начальный азимут и конечный азимут — мне это нужно, чтобы нарисовать контур вокруг некоторого объекта

2. К вашему сведению, «На больших расстояниях это принимает ярко выраженную круглую форму». таким образом, дуга будет отображаться только на больших расстояниях