4

作業中のアプリにルーティング機能を追加しようとしています。かなりうまく機能する線を描く方法に関するCraigSpitzkoffの記事を見つけました。MKMapViewしかし、道路上のポイントの座標がわからないため、期待どおりに役立ちません。現在の位置と別の住所など、特定のポイント間の座標を決定する方法はありますか?

4

2 に答える 2

4

基本的に、 GoogleDirectionsAPIに対してHTTPリクエストを行う必要があります。利用規約では、結果をGoogleマップに表示する必要があると規定されていますが、MKMapViewを使用しているため、問題はないと思います。

Directions APIは、Googleマップに結果を表示する場合にのみ使用できます。道順データが要求された地図を表示せずに道順データを使用することは禁止されています。

URLで渡す必要のあるパラメータの詳細については、ルートリクエストを確認してください。

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

返されるデータは、要求した内容(出力)に応じてJSONまたはXMLになるため、方向を説明する一連のポイントを取得するには、それを解析する必要があります。

于 2010-09-07T04:23:36.243 に答える
0

これは古い質問ですが、最近は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
    }
}
于 2019-04-17T18:21:30.280 に答える