У меня есть 2 местоположения на карте.Первый - это текущее местоположение пользователя с меткой в виде синей точки.И второй указывает местоположение ресторана рядом с текущим местоположением пользователя с меткой красной точки.Я хочу получить указания от текущего местоположения пользователей до местоположения ресторана.Я получаю указания, когда определяю значения широты и долготы, такие как latitude: 38.00001 and longitude: 27.08980
.
Также я получаю местоположение каждого ресторана от api до метки красной точки.Но не получайте указания от текущего местоположения пользователя до местоположения ресторана.
Я получаю местоположение ресторана с этими кодами:
var viewModel: DetailsViewModel? {
didSet {
updateView()
}
willSet {
updateView()
}
}
func updateView() {
if let viewModel = viewModel {
detailsFoodView?.priceLabel?.text = viewModel.price
detailsFoodView?.hoursLabel?.text = viewModel.isOpen
detailsFoodView?.locationLabel?.text = viewModel.phoneNumber
detailsFoodView?.ratingsLabel?.text = viewModel.rating
detailsFoodView?.collectionView?.reloadData()
centerMap(for: viewModel.coordinate)
print("detail restaurant destination : \(viewModel.coordinate)")
title = viewModel.name
print("title: \(title)")
}
}
func centerMap(for coordinate: CLLocationCoordinate2D) {
let region = MKCoordinateRegion(center: coordinate, latitudinalMeters: 100, longitudinalMeters: 100)
let annotation = MKPointAnnotation()
annotation.coordinate = coordinate
detailsFoodView?.mapView?.addAnnotation(annotation)
detailsFoodView?.mapView?.setRegion(region, animated: true)
}
}
А в viewDidLoad()
получаем такие указания, как:
let sourceCoordinates = locationManager.location?.coordinate
Проблема здесь
Я не получаю значения широты и долготы каждого ресторана в destCoordinates
.Обычно я получаю с viewModel.coordinate
.
Но если я использую
let destCoordinates = CLLocationCoordinate2D(latitude: viewModel?.coordinate.latitude, longitude: viewModel?.coordinate.longitude)
Вместо:
let destCoordinates = CLLocationCoordinate2D(latitude: 38.420183, longitude: 27.205559)
Я получаю значения широты и долготыноль или ноль.
let sourcePlaceMark = MKPlacemark(coordinate: sourceCoordinates!)
let destPlaceMark = MKPlacemark(coordinate: destCoordinates)
let sourceItem = MKMapItem(placemark: sourcePlaceMark)
let destItem = MKMapItem(placemark: destPlaceMark)
let directionRequest = MKDirections.Request()
directionRequest.source = sourceItem
directionRequest.destination = destItem
directionRequest.transportType = .automobile
let directions = MKDirections(request: directionRequest)
directions.calculate(completionHandler: {response, error in
guard let response = response else {
if error != nil {
print("Something went wrong!")
}
return
}
let route = response.routes[0]
self.detailsFoodView?.mapView?.addOverlay(route.polyline, level: .aboveRoads)
let rect = route.polyline.boundingMapRect
self.detailsFoodView?.mapView?.setRegion(MKCoordinateRegion(rect), animated: true)
Ожидаемый результат - текущее место пользователя в виде метки с синей точкой на метке красной точки с красной линией, как вы можете видеть на снимке экрана.
Изображение: