Рендеринг мультиполилиний на одну карту в быстром - PullRequest
0 голосов
/ 21 февраля 2020

Я хочу попробовать нанести несколько разных пешеходных зон на карту, используя полилинии. Приложение отлично работает для одного, однако, когда я пытаюсь добавить пешеходную зону 2, полиин вообще не отображается между точками зоны 2. Как я могу получить это, чтобы показать полилинию для зоны 1 и зоны 2?

Я не могу понять, где я ошибаюсь с этим, так как он отлично работает для первой зоны ходьбы, но не когда я добавляю в дополнительной зоне.

import UIKit
import MapKit

class customPin: NSObject, MKAnnotation {
var coordinate: CLLocationCoordinate2D
var title: String?
var subtitle: String?

init(pinTitle:String, pinSubTitle:String, location:CLLocationCoordinate2D) {
    self.title = pinTitle
    self.subtitle = pinSubTitle
    self.coordinate = location
}
}

class ViewController: UIViewController, MKMapViewDelegate {

@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //co-ordinates
    let zone1S = CLLocationCoordinate2D(latitude: 52.100525, longitude: -9.623071)
    let zone1E = CLLocationCoordinate2D(latitude: 52.07241, longitude: -9.575299)

    let zone2S = CLLocationCoordinate2D(latitude: 52.054161, longitude: -9.385031)
    let zone2E = CLLocationCoordinate2D(latitude: 52.081185, longitude: -9.247033)


    //pins
    let zone1PinS = customPin(pinTitle: "Zone 1 Start", pinSubTitle: "", location: zone1S)
    let zone1PinE = customPin(pinTitle: "Zone 1 End", pinSubTitle: "", location: zone1E)
    self.mapView.addAnnotation(zone1PinS)
    self.mapView.addAnnotation(zone1PinE)

    let zone2PinS = customPin(pinTitle: "Zone 2 Start", pinSubTitle: "", location: zone2S)
    let zone2PinE = customPin(pinTitle: "Zone 2 End", pinSubTitle: "", location: zone2E)
    self.mapView.addAnnotation(zone2PinS)
    self.mapView.addAnnotation(zone2PinE)


    let zone1PlacemarkS = MKPlacemark(coordinate: zone1S)
    let zone1PlacemarkE = MKPlacemark(coordinate: zone1E)

    let zone2PlacemarkS = MKPlacemark(coordinate: zone2S)
    let zone2PlacemarkE = MKPlacemark(coordinate: zone2E)


    let directionRequest = MKDirections.Request()
    directionRequest.source = MKMapItem(placemark: zone1PlacemarkS)
    directionRequest.destination = MKMapItem(placemark: zone1PlacemarkE)

    //type of commute
    directionRequest.transportType = .automobile



    let directions = MKDirections(request: directionRequest)
    directions.calculate { (response, error) in
        guard let directionResonse = response else {
            if let error = error {
                print("we have error getting directions==\(error.localizedDescription)")
            }
            return
        }

        let route = directionResonse.routes[0]
        self.mapView.addOverlay(route.polyline, level: .aboveRoads)


        let rect = route.polyline.boundingMapRect
        //zooming in on location
       // self.mapView.setRegion(MKCoordinateRegion(rect), animated: true)
    }

    //set delegate for mapview
    self.mapView.delegate = self
}


func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    let renderer = MKPolylineRenderer(overlay: overlay)
    renderer.strokeColor = UIColor.red
    renderer.lineWidth = 5.0
    return renderer
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

1 Ответ

1 голос
/ 21 февраля 2020

когда я пытаюсь добавить зону ходьбы 2

Но вы не добавляете это. Вы говорите,

let directionRequest = MKDirections.Request()
directionRequest.source = MKMapItem(placemark: zone1PlacemarkS)
directionRequest.destination = MKMapItem(placemark: zone1PlacemarkE)

У вас есть только один запрос направления, и он использует zone1PlacemarkS и zone1PlacemarkE, так что это те направления, которые вы получаете. Вы никогда не делаете запрос направления для двух zone2 меток; Вы просто выбрасываете их, неиспользованные. (Действительно, я ожидал бы, что компилятор предупредит вас об этом.)

...