2010年10月23日土曜日

Google 乗り換え案内(トランジット)を使用してみる

Google 乗り換え案内の URLとパラメータは概ね以下のようなものです。
URL: http://www.google.co.jp/maps
パラメータ:

  • dirflg :
    乗換え案内|車|徒歩 (r|d|w)

  • saddr :
    出発地

  • daddr :
    到着地

  • date :
    日付 (2010/10/10)

  • time :
    時刻 (16:00)

  • ttype :
    到着時刻|出発時刻|終電 (arr|dep|last)

  • sort :
    時間|料金|乗換回数 (time|fare|num)

  • noexp :
    有料特急を使わない (1)


パラメータの大体の意味がわかったところで、指定されたパラメータに応じて、乗換え案内の URL文字列を組み立てるメソッドを作成します。
     /**
    * 乗換え案内のURLを返す
    * @param from 出発地 (東京)
    * @param to   到着地  (横浜)
    * @param date 日付    (2010/09/02)
    * @param time 時刻    (15:00)
    * @param type 出発|到着 (dep|arr)
    * @param express 有料特急の使用 (true|false)
    */
    public static String getTransitURL(String from, String to,
              String date, String time, String type, boolean express) {
         StringBuilder sb = new StringBuilder();
         try {
              String encFrom = URLEncoder.encode(from, "utf-8");
              String encTo = URLEncoder.encode(to, "utf-8");
              String encDate = URLEncoder.encode(date, "utf-8");
              String encTime = URLEncoder.encode(time, "utf-8");

              sb.append("http://www.google.co.jp/maps?ie=UTF8&f=d&dirflg=r")
                .append("&saddr=").append(encFrom)
                .append("&daddr=").append(encTo)
                .append("&date=").append(encDate)
                .append("&time=").append(encTime)
                .append("&ttype=").append(type)
                .append("&sort=time");
            
              if (!express) {
                   //有料特急を使用しない場合
                   sb.append("&noexp=1");
              }
         } catch (UnsupportedEncodingException e1) {}
       
       
         return sb.toString();
    }


最寄り駅(例えば川口駅) から、新宿の都庁までの乗換え案内を表示する場合、以下のようなコードになります。

public class TransitTest {

   private static Browser browser;
  
   /**
    * @param args
    */
   public static void main(String[] args) {
       System.setProperty("org.eclipse.swt.browser.XULRunnerPath",
               "C:\\_tool\\xulrunner");
       Display display = Display.getDefault();
       Shell shell = new Shell(display);
       shell.setLayout(new FillLayout());
       shell.setLocation(10, 10);
       shell.setSize(1000, 800);
       browser = new Browser(shell, SWT.MOZILLA);

       Calendar cal = Calendar.getInstance();
       SimpleDateFormat sdfD = new SimpleDateFormat("yyyy/MM/dd");
       SimpleDateFormat sdfT = new SimpleDateFormat("hh:mm");
       String date = sdfD.format(cal.getTime());
       String time = sdfT.format(cal.getTime());
       cal.add(Calendar.MINUTE, 10);
       //自分の最寄り駅から打合せ先企業の住所へ現在から10分後に出発
       String url = HtmlTemplate.getTransitURL("川口駅(埼玉)", "東京都新宿区西新宿2丁目8-1 (東京都庁)", date, time, "dep", false);
       if (url!=null && url.length()>0) {
           browser.setUrl(url);
       } else {
           browser.setText(HtmlTemplate.getClearHtml("FFFFFF"));
       }
       shell.open();
       while (!shell.isDisposed()) {
           if (!display.readAndDispatch()) {
               display.sleep();
           }
       }
       shell.dispose();
       display.dispose();
   }


}


サンプルアプリケーションの実行結果:

0 件のコメント: