Я хочу добавить путь наложения между несколькими координатами в mapview. Я пробовал как ниже код, но он показывает ошибку «не может вызывать« карту »с помощью списка аргументов типа ((CLLocation) -> CLLocationCoordinate2D)». Пожалуйста, дайте мне знать, как я могу это исправить?Как добавить путь наложения в MKMapView swift
Мой ViewController.swift файл
import UIKit
import MapKit
class ViewController: UIViewController, MKMapViewDelegate{
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
//For Location 1
let location1 = CLLocationCoordinate2D(
latitude: 51.481188400000010000,
longitude: -0.190209099999947280
)
let annotation1 = MKPointAnnotation()
annotation1.coordinate = location1;
annotation1.title = "Chelsea"
annotation1.subtitle = "Chelsea"
let span = MKCoordinateSpanMake(0.15, 0.15)
let region1 = MKCoordinateRegion(center: location1, span: span)
mapView.setRegion(region1, animated: true)
mapView.addAnnotation(annotation1)
//For Location 2
let location2 = CLLocationCoordinate2D(
latitude: 51.554947700000010000,
longitude: -0.108558899999934510
)
let annotation2 = MKPointAnnotation()
annotation2.coordinate = location2;
annotation2.title = "Arsenal"
annotation2.subtitle = "Arsenal"
let region2 = MKCoordinateRegion(center: location1, span: span)
mapView.setRegion(region2, animated: true)
mapView.addAnnotation(annotation2)
var locations = [CLLocation(latitude: 51.481188400000010000, longitude: -0.190209099999947280), CLLocation(latitude: 51.554947700000010000,longitude: -0.108558899999934510)]
//This line shows error
var coordinates = locations.map({(location: CLLocation) -> CLLocationCoordinate2D in return location.coordinate})
var polyline = MKPolyline(coordinates: &coordinates, count: locations.count)
mapView.addOverlay(polyline)
}
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay is MKPolyline {
var polylineRenderer = MKPolylineRenderer(overlay: overlay)
polylineRenderer.strokeColor = UIColor.blueColor()
polylineRenderer.lineWidth = 5
return polylineRenderer
}
return nil
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Ответ полезен, но обратите внимание, что вам даже не нужно сначала создать массив CLLocations, а затем сопоставить их с массивом CLLocationCoordinate2Ds. Вы можете создать массив CLLocationCoordinate2Ds напрямую: 'var coord = = [location1, location2]'. Также не нужно повторять значения координат - используйте переменные, которые уже имеют значения (location1, location2). – Anna
Незначительная деталь стороны: region2 центр использует location1 вместо location2. Однако вам не нужно делать setRegion для добавления аннотации в месте. Здесь на дисплей влияет только второй вызов setRegion. – Anna