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

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

ただいまの
回答率

90.51%

  • JavaScript

    20417questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML5

    5128questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • Google API

    672questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Google マップ

    425questions

    Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

google map apiで公共機関を用いた場合の二地点間の距離と時間を戻り値として取得したい。

解決済

回答 1

投稿

  • 評価
  • クリップ 3
  • VIEW 1,918

tacchan

score 52

google map apiについての質問です。

特にルート案内、つまりDirections Service についての内容です。

私が得たい戻り値は、二地点間の距離と移動に必要な所要時間です。
幸い、この二つはapiを用いて取り出すコードが書けました。

しかし、得られた時間は車での所要時間であり、公共機関を用いた場合の時間ではありません。
私はブラウザでgoogle mapを開いたときに使うことのできるルート案内を再現して、距離と時間を抽出したいのです。

以下に、現在のコードを載せます。(このコードでは距離だけを表示していますが、distanceをdurationにすれば時間も求められます)
この中で、travelModeをTRANSITにすればよい、と考え試してみましたがなぜか動かなくなりました。
(ただし日本の地図で駄目なだけでアメリカでは正常に動くかもしれません。しかし、自分が使いたいのは日本内でのことなので海外で普通に動くかは考慮に入れません)
最終的に距離と時間が戻り値として取れればいいので、地図の表示やルートの細かい説明の部分はいらなくなります。

根本的に使うサービス(Directions Service )が的外れなのか、間違ったコードを書いてしまっているのかもよくわからなくなってしまいました。
日本における公共機関を用いての距離と時間が得ることができれば、何でも構いません。
よろしくお願いいたします。

<!DOCTYPE html>
 <html lang="ja">
 <head>
 <meta charset="utf-8">
 <title>Google Maps API ver 3 Sample/グーグルマップAPIサンプル/Google Maps API样品</title>
 <link rel="stylesheet" href="css/main.css" type="text/css" media="all">
 <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>
 
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript">
    var center = new google.maps.LatLng(35.67849, 139.39178);
    var zoom = 10;
    var mapTypeId = google.maps.MapTypeId.ROADMAP
</script>
<script type="text/javascript"> 

var rendererOptions = 
{
draggable: true,
preserveViewport:false
};
var directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);;

var directionsService = new google.maps.DirectionsService();
var map;
var tokyo= new google.maps.LatLng(35.68407, 139.63623);
 
function initialize() 
{
    var myOptions = 
    {
    center: center,
    zoom: zoom,
    mapTypeId: mapTypeId
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById("directionsPanel"));
     google.maps.event.addListener(directionsDisplay, 'directions_changed', function() 
    {
    computeTotalDistance(directionsDisplay.directions); //◆総距離合計
    });

    calcRoute();
}
 
function calcRoute() 
{
    var request = 
    {
    origin: "東京",
    destination: "大阪",
    waypoints:[
            {
    location: "静岡",
    stopover:true
    }, 
    {
    location: "名古屋",
    stopover:true
    }
    ],
    travelMode: google.maps.DirectionsTravelMode.DRIVING,//ドライビングモード指定(車)
    provideRouteAlternatives: false, //オルタネイティブルートの表示
    unitSystem: google.maps.DirectionsUnitSystem.METRIC,//単位km表示
    optimizeWaypoints: true,//最適化された最短距離にする。
    avoidHighways: false,//trueで高速道路を使用しない
    avoidTolls: false //trueで有料道路を使用しない
    };
    directionsService.route(request, function(response, status) 
    {
        if (status == google.maps.DirectionsStatus.OK) 
        {


    document.getElementById('distance').innerHTML+=   +response.routes[0].legs[0].distance.value /1000 + " km";           
     document.getElementById('distance1').innerHTML+=   response.routes[0].legs[1].distance.value /1000 + " km";           
    document.getElementById('distance2').innerHTML+=   response.routes[0].legs[2].distance.value /1000 + " km";           



        directionsDisplay.setDirections(response);
        }
    });
}
 
//◆総距離合計
function computeTotalDistance(result)
{
var total = 0;
var myroute = result.routes[0];
    for (i = 0; i < myroute.legs.length; i++)
    {
    total += myroute.legs[i].distance.value;
    }
    total = total / 1000.
    document.getElementById("total").innerHTML = total + " km";
}  


window.onload=initialize;
</script> 
   
 </head>
 <body>
 合計距離: <span id="total"></span>  区間AB:<span id="distance"></span>  区間BC:<span id="distance1"></span>  区間CD:<span id="distance2"></span>
<div style="position:relative; border: 1px; width : 950px; height : 594px;">
<!--ここからGoogle Maps v3用-->

<div id="map_canvas" style="border: 1px solid black; position:absolute; width : 671px; height : 553px;top : 12px;left : -5px;"></div>
<div id="directionsPanel" style="position:absolute; left : 682px; width : 263px; height : 575px; overflow: auto;top : 0px;"></div>
<!--ここまでGoogle Maps v3用--></div>

 </body>
 </html> 


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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+3

The Google Maps Directions Service supports all of the transit providers listed in the Transit Coverage List, except for those in Japan. 
https://developers.google.com/maps/faq#transit_directions_countries

とのこと。現状では難しいのでは。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • JavaScript

    20417questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML5

    5128questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • Google API

    672questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

  • Google マップ

    425questions

    Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。