チュートリアル

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

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

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

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

1.YMapKitTestAppDelegateにYMKNaviControllerDelegateプロトコルを追加します。

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

  • YMapKitTestAppDelegate.h
#import <UIKit/UIKit.h>
#import <YMapKit/YMapKit.h>//YMapKit.frameworkのヘッダーファイルをインポート

  #define MIDTOWN_LAT 35.6657214
#define MIDTOWN_LON 139.7310058

//YMKMapViewDelegateを追加
@interface YMapKitTestAppDelegate : NSObject <YMKNaviControllerDelegate, YMKRouteOverlayDelegate, UIApplicationDelegate, YMKMapViewDelegate,YMKLabelTouchDelegate> {
    UIWindow *window;
    YMKMapView *map; //YMKMapViewインスタンス用ポインタ
    YMKNaviController *naviController; //ルート案内インスタンス
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
      

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

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

  • YMapKitTestAppDelegate.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];
 }
      

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

  • YMapKitTestAppDelegate.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];
}
      

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