Как получить указания от местоположения пользователя до другого определенного местоположения? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть 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) 

Ожидаемый результат - текущее место пользователя в виде метки с синей точкой на метке красной точки с красной линией, как вы можете видеть на снимке экрана.

Изображение: Screenshot of map

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...