質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

Google map Direction APIについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 321

score 23

Google map Direction APIを使ってA地点からB地点への移動経路を曜日ごとに切り替えるアプリを作りたいです。
現在は画像のように複数の移動経路をマップ上に表示させることができています。
イメージ説明
この複数ある経路の中から曜日ごとに切り替えて一つの経路を表示したいです。

↓参考にしたサイトはこちらです↓
Google map SDK for iOS で経路検索

肝心なViewControllerのソースはこちら(その他諸々なソースはサイトから取得できます)

//
//  ViewController.swift
//  Direction
//
//  Created by Shichimitoucarashi on 2017/12/15.
//  Copyright © 2017年 keisuke yamagishi. All rights reserved.
//

import UIKit
import GoogleMaps

class ViewController: UIViewController, GMSMapViewDelegate {

    var mapView: GMSMapView!
    var coordinates: [CLLocationCoordinate2D] = []
    var direction: Direction!

    override func loadView() {
        super.loadView()
        navigationController?.isNavigationBarHidden = true
        //表示する位置
        let camera = GMSCameraPosition.camera(withLatitude: 34.964298,
                                              longitude: 138.406921,
                                              zoom: 13.0)
        //マップのインスタンスをここで入れてる
        self.mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
        self.mapView.isMyLocationEnabled = true
        self.mapView.delegate = self
        view = self.mapView
        //引数(経路検索開始位置と経路検索終了位置)を与えてDirectionクラスからインスタンスを生成
        let direction = Direction(from: "34.964298,138.4069219",
                                  to: "34.971698,138.3890637",
                                  alternative: true)
        //赤ピンの現在位置
        let fromMarker = CLLocationCoordinate2D(latitude: 34.964298, longitude: 138.4069219)
        //赤ピンの目的位置
        let toMarker = CLLocationCoordinate2D(latitude: 34.971698, longitude: 138.3890637)
        coordinates.append(fromMarker)
        coordinates.append(toMarker)
        self.directionMarker(location: fromMarker)
        self.directionMarker(location: toMarker)
        //ここで経路の検索をしてる、検索結果はroutesに入る
        direction.calculation(completion: { [unowned self] route in
            guard let routes = route.routes as? [Routes] else {
                return
            }
            //ここで経路をマップのViewに追加して表示させてる
            self.mapView.addDirection(routes: routes, color: .red)
            print("------------------------- routes -----------------------------")
            print(routes)
        }, failuer: { error in
            print(error)
        })
    }

    //タップしたところに赤ピンを移動させるデリゲート関数
    /*
     func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {

        if coordinates.count >= 2 {
            coordinates.removeAll()
            self.mapView.clear()
        }

        directionMarker(location: coordinate)
        coordinates.append(coordinate)

        if coordinates.count == 2 {

            self.direction = Direction(from: coordinates[0], to: coordinates[1], alternative: true, mode: .transit)

            direction.calculation(completion: {[unowned self] route in
                guard let routes = route.routes as? [Routes] else {
                    return
                }
                self.mapView.addDirection(routes: routes)
            }, failuer: { error in
                print(error)
            })
        }
    }
    */

    func directionMarker (location: CLLocationCoordinate2D) {
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude)
        marker.title = "start Direction"
        marker.snippet = "Hi! What's up!"
        marker.map = mapView
    }
}


検索結果が入るであろうroutesの中身を見てみるとここに載せ切れないほどの大量の英数字が入っていました。
そこで検索結果の方をいじるのではなく検索方法をいじろうと思いました。
検索には Direction クラスの calculation というメソッドを使っています。
このDirectionクラスは GoogleMaps ライブラリに定義されていると思うのでPodsフォルダの中のGoogleMapsフォルダの中を見てみたのですがDirectionクラスが定義されてるファイルが見つかりません...
もしかして経路検索はGoogleのオンラインサービスなのでサーバ上にコードがあるのでしょうか??

マニアックな質問になりますが、知っていればご教授よろしくお願い致します。。。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

このDirectionクラスは GoogleMaps ライブラリに定義されていると思う

GitHub - keisukeYamagishi/Direction

このパッケージを使っているなら、これなのでは?

Directionクラスのソースは
Direction/Direction at master · keisukeYamagishi/Direction · GitHub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/03/22 15:35

    ご回答ありがとうございます。
    仰る通りにDirection.swiftにcalculationメソッドが定義されていました。
    calculationメソッドについて自分なりに分析して解らなければまた質問するかもしれません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る