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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google マップ

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

解決済

GASでGoogleMAPの提示するルートの距離・時間をすべて表示させたい

coool
coool

総合スコア4

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google マップ

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

1回答

0評価

0クリップ

1074閲覧

投稿2022/03/01 05:30

編集2022/03/02 09:55

前提・実現したいこと

スプレッドシート上に記した地点間の距離・時間をGASで自動計算する際、
GoogleMAP上での最短距離を出したいと考えています。

例)
10km 25分 → 後述GASの結果はこちらが表示される
9km  28分 → 欲しいデータはこちら(最短距離)

そのために、下記の方法でアプローチするつもりです。

①Googleマップで提示されるルートを配列で取得
②スプレッドシート セルD列,E列に転記

計算式自体は作動しますが、ルートが一種類しか取得されません。

この場合伺いたいのは、下記2点です。

●GoogleMAP上での最短距離だけを出したい場合、ほかにいい方法はあるかどうか。
●この方法でのアプローチを続ける場合、全ルートを配列取得するためにはどうすればいいか。

GAS初心者ですので、不足している情報等ございましたらご指摘をお願い致します。
恐れ入りますがご教授のほど、宜しくお願い致します。

ABCDE
1スタートゴール移動手段距離時間
2東京タワー東京スカイツリーdrive
3
4

発生している問題・エラーメッセージ

14:13:45 お知らせ 実行開始 14:13:46 情報 1 14:13:47 情報 1 14:13:47 お知らせ 実行完了

結果

ABCDE
1スタートゴール移動手段距離時間
2東京タワー東京スカイツリーdrive10.66131.08333333
3
4

問題点
二種類のルートが出てくるため、配列の要素数は2になるはずなのに、配列の要素数は1

該当のソースコード

GAS

var spreadSheetId = "シートID"; var spreadsheet = SpreadsheetApp.openById(spreadSheetId); //スプレッドシート var changesheet = spreadsheet.getSheetByName("MAP"); //シート名 function mapQuery1(src, dest, type, result) { var finder = Maps.newDirectionFinder() .setOrigin(src) .setDestination(dest) .setLanguage("ja") if (type=="highway"){ finder = finder .setMode(Maps.DirectionFinder.Mode.DRIVING); } else if (type=="toll"){ finder = finder .setMode(Maps.DirectionFinder.Mode.DRIVING) .setAvoid(Maps.DirectionFinder.Avoid.HIGHWAYS); } else if (type=="drive"){ //今回はdriveで計算する finder = finder .setMode(Maps.DirectionFinder.Mode.DRIVING) .setAvoid(Maps.DirectionFinder.Avoid.TOLLS) .setOptimizeWaypoints(true); } else if (type=="bicycle"){ finder = finder .setMode(Maps.DirectionFinder.Mode.BICYCLING); } else if (type=="walk"){ finder = finder .setMode(Maps.DirectionFinder.Mode.WALKING); } var route = finder.getDirections().routes; var length = route.length; console.log(length) for (let i = 0; i < length; i++) { var route = finder.getDirections().routes[i]; var length1 = route.legs.length; //console.log(length1) for (let k = 0; k < length1; k++) { var value = route.legs[k]; if (result=="distance"){ value = value.distance.value/1000; //kilometer changesheet1.getRange(2+k,4).setValue(value); } else if (result=="duration"){ value = value.duration.value/60; //minutes changesheet1.getRange(2+k,5).setValue(value); } } } return value; } function MAP1(){ if(changesheet1.getRange("A2").getValue() != ""){ var src = changesheet1.getRange("A2").getValue(); var dest = changesheet1.getRange("B2").getValue(); var type = changesheet1.getRange("C2").getValue(); var result = "distance" mapQuery1(src, dest, type, result) var src = changesheet1.getRange("A2").getValue(); var dest = changesheet1.getRange("B2").getValue(); var type = changesheet1.getRange("C2").getValue(); var result = "duration" mapQuery1(src, dest, type, result) } }

分からないこと

配列routes、legsの役割

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google マップ

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