チュートリアル

Yahoo! iOSマップSDKの主要機能をひととおり体験していただくための開発チュートリアルを用意しました。
「利用準備」を済ませたうえでご利用ください。

ルート案内を地図で表示する

取得した現在位置情報をもとに、地図を使ったルート案内機能を提供します。

YMKRouteOverlayをYMKNaviControllerに設定することで、ルート案内情報を取得することができます。

1.位置情報の利用を可能にするため、Info.plistにNSLocationWhenInUseUsageDescriptionを追加します。

  • Info.plist
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>現在地の表示、ルート案内に位置情報を利用します。</string>

2.ViewControllerにYMKNaviControllerDelegateプロトコルを追加します。

YMKNaviControllerインスタンスもメンバーに含めておくといいでしょう。

  • ViewController.h
@interface ViewController : UIViewController <YMKMapViewDelegate, YMKNaviControllerDelegate>
  • ViewController.m
@implementation ViewController {
    YMKMapView* map;

    YMKNaviController *naviController;  // ルート案内インスタンス
}

3.ルート検索終了後、YMKNaviControllerを作成しYMKRouteOverlayとYMKMapViewを設定します。

設定後、「start」メソッドを実行することでGPSが起動しルート案内処理を開始します。

  • ViewController.m
// ルート検索が正常に終了した場合
-(void)finishRouteSearch:(YMKRouteOverlay*)routeOverlay
{
    // YMKRouteOverlayをYMKMapViewに追加
    [map addOverlay:routeOverlay];

    // YMKNaviControllerを作成しYMKRouteOverlayインスタンスを設定
    naviController = [[YMKNaviController alloc] initWithRouteOverlay:routeOverlay];

    // YMKMapViewインスタンスを設定
    [naviController setMapView:map];

    // YMKNaviControllerDelegateを設定
    naviController.delegate = self;

    // 案内処理を開始
    [naviController start];
}

4. YMKNaviControllerDelegateでルート案内情報が受け取ることができます。

  • ViewController.m
// 現在位置更新された場合
-(void)naviController:(YMKNaviController*)naviControl didUpdateUserLocation:(YMKUserLocation *)userLocation
{
    // 目的地までの残りの距離
    double rema_dist = [naviControl getDistanceOfRemainder];

    // 目的地までの残りの時間
    double rema_time = [naviControl getTimeOfRemainder];

    // 出発地から目的地までの距離
    double total_dist = [naviControl getTotalDistance];

    // 出発地から目的地までの時間
    double total_time = [naviControl getTotalTime];
}

// 現在位置取得エラーが発生した場合
-(void)naviController:(YMKNaviController*)naviControl didFailToLocateUserWithError:(NSError *)error
{

}

// 現在位置の精度が悪い場合
-(void)naviControllerAccuracyBad:(YMKNaviController*)naviControl didUpdateUserLocation:(YMKUserLocation *)userLocation
{

}

// ルートから外れたと判断された場合
-(void)naviControllerRouteOut:(YMKNaviController*)naviControl didUpdateUserLocation:(YMKUserLocation *)userLocation
{

}

// 目的地に到着した場合
-(void)naviControllerOnGoal:(YMKNaviController*)naviControl didUpdateUserLocation:(YMKUserLocation *)userLocation
{
  // 案内処理を継続しない場合は停止させる
  [naviControl stop];
}

表示例:ルート案内を地図で表示する
ルート案内を地図で表示する