Добавление маршрута в MKMapView - PullRequest
       21

Добавление маршрута в MKMapView

4 голосов
/ 06 сентября 2010

Я пытаюсь добавить функцию маршрутизации в приложение, над которым я работаю.Я нашел статью Крэйга Шпицкоффа о том, как рисовать линии на MKMapView, который работает довольно хорошо.Но так как у меня нет координат точек на дорогах, это не помогает мне, как ожидалось.Есть ли способ определить координаты между заданными точками, скажем, мое текущее местоположение и другой адрес?

Ответы [ 2 ]

4 голосов
/ 07 сентября 2010

В основном вам нужно будет сделать HTTP-запрос к Google Directions API . Условия предоставления услуг гласят, что вы должны отображать результаты на карте Google, но я думаю, что поскольку вы используете MKMapView, у вас все будет в порядке:

API маршрутов можно использовать только в сочетании с отображением результатов на карте Google; использование данных о маршрутах без отображения карты, для которой запрашивались данные о маршрутах, запрещено.

Ознакомьтесь с запросом Directions для получения подробной информации о параметрах, которые вам нужно будет передать по URL:

http://maps.google.com/maps/api/directions/output?parameters

Данные, которые вы получите, будут JSON или XML в зависимости от того, что вы просили ( output ), поэтому вам нужно будет проанализировать их, чтобы получить множество точек, описывающих направления.

0 голосов
/ 17 апреля 2019

Я знаю, что это старый вопрос, но в настоящее время вы также можете использовать MapKit MKDirections. Например, вот процедура поиска некоторых searchString, а затем добавления указаний к первому попаданию в вид карты:

let request = MKLocalSearch.Request()
request.region = mapView.region
request.naturalLanguageQuery = searchString

let search = MKLocalSearch(request: request)
search.start { response, _ in
    guard let mapItem = response?.mapItems.first else { return }

    let request = MKDirections.Request()
    request.source = MKMapItem.forCurrentLocation()
    request.destination = mapItem
    let directions = MKDirections(request: request)
    directions.calculate { response, error in
        guard let routes = response?.routes else { return }

        let overlays = routes.map { $0.polyline }
        self.mapView.addOverlays(overlays)
    }
}

Чтобы убедиться, что это отображается на вашей карте, вы должны установить свойство delegate вида карты (в IB или программно), а затем реализовать mapView(_:rendererFor:):

extension MapViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        let renderer = MKPolylineRenderer(overlay: overlay)
        renderer.strokeColor = .init(red: 0, green: 0, blue: 1, alpha: 0.7)
        return renderer
    }
}
...