Ios 如何将当前位置设置为request.source Swift 3
好的,希望是一个简单快速的问题 我正在构建一个mapView,它使用Apple Maps并运行良好,我的segue将纬度和经度注入地图,我希望从当前位置导航到包含lat和lon值的注释 我已经设法在地图上显示了当前位置,并显示了注释,但我不确定如何在下面的代码行中将当前位置设置为源点Ios 如何将当前位置设置为request.source Swift 3,ios,swift,xcode,Ios,Swift,Xcode,好的,希望是一个简单快速的问题 我正在构建一个mapView,它使用Apple Maps并运行良好,我的segue将纬度和经度注入地图,我希望从当前位置导航到包含lat和lon值的注释 我已经设法在地图上显示了当前位置,并显示了注释,但我不确定如何在下面的代码行中将当前位置设置为源点 request.source = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: lat,longitud
request.source = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: lat,longitude: lon)))
这使用了我当前从segue注入的lat和lon变量。我希望request.source行是我的当前位置,lat和lon vars是我已经拥有的目的地
我只是不确定将request.source设置为我当前位置的语法
这是我的全部VC代码供参考:
导入UIKit
导入地图套件
导入核心定位
类LocateVC:UIViewController,MKMapViewDelegate{
@IBOutlet weak var mapView: MKMapView!
var lat: Double!
var lon: Double!
var name: String!
var locationManager = CLLocationManager()
func checkLocationAuthorizationStatus() {
if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
mapView.showsUserLocation = true
} else {
locationManager.requestWhenInUseAuthorization()
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
checkLocationAuthorizationStatus()
}
override func viewDidLoad() {
super.viewDidLoad()
annotation.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon)
mapView.addAnnotation(annotation)
let request = MKDirectionsRequest()
request.source = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: lat,longitude: lon)))
request.destination = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: lat,longitude: lon)))
request.requestsAlternateRoutes = true
request.transportType = .automobile
let directions = MKDirections(request: request)
directions.calculate {[unowned self] response, error in
guard let unwrappedResponse = response else { return }
for route in unwrappedResponse.routes {
self.mapView.add(route.polyline)
self.mapView.setVisibleMapRect(route.polyline.boundingMapRect, animated: true)
}
}
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let renderer = MKPolylineRenderer(polyline: overlay as! MKPolyline)
renderer.strokeColor = UIColor.blue
return renderer
}
let regionRadius: CLLocationDistance = 1000
let annotation = MKPointAnnotation()
func centerMapOnLocation(location: CLLocation) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, regionRadius * 2.0, regionRadius * 2.0)
mapView.setRegion(coordinateRegion, animated: true)
mapView.showsUserLocation = true
}
您必须重写CLLocationManager.didUpdateLocations,以便在位置管理器检索当前位置时收到通知。您必须应用CLLocationManager委派
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
let location = locations.last as CLLocation
let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
self.map.setRegion(region, animated: true)
}