実現したいこと
最短距離を抽出し、最短距離のものを画像に変換したい
前提
本サイトの
「GASでGoogleMAPの提示するルートの距離・時間をすべて表示させたい」
という質疑やその他の参考サイト等をもとに作成しましたが、
エラーの原因がわからず、先に進むことができません。
誰でも修正できるようにコメント等をたくさん入れているため分かりにくくなっています。
該当のソースコード
function createMap_変数チェック(){ // 拠点リストのシートを取得する挙動を宣言 let sheetDB = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("リスト") // 地図を表示させるシートを取得する挙動を宣言 let sheetMap = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("地図") // jikanで出発時刻を確定し宣言。平日月曜かつ深夜0時で固定する。 let jikan = new Date(2022,12,5) // ループ処理前に前回の地図データを削除する sheetMap.clear() // ループ処理開始 // 拠点リストにおいて最終行まで次の処理を繰り返す for (let m = 1 ; m <= sheetDB.getLastRow() ; m++){ // 拠点リストにおいて1行あたりの地点数を確認し、変数宣言 // 1行あたりの件数を確認し結果を変数宣言。ただし、様式に従い最大8地点まで。関数を9列目に差し込む sheetDB.getRange(m,9).setFormula("=counta(RC[-8]:RC[-1])") // 関数結果をpoCount変数に格納 let poCount = sheetDB.getRange(m,9).getValue() // point変数に地点をすべて格納。point[0][0]が始点、point[0][1]が2地点目…となる。 let point = sheetDB.getRange(m,1,1,8).getValues() // 拠点のデータをもって地図シートに移動し、地図シートで片道ずつの最短経由を追加する // poCountに格納された地点数-1が片道ずつの経路数。poCount-1回まで繰り返す for (let po = 1 ; po <= poCount - 1 ; po++) { // 始点はpoint[0][po-1]、終点はpoint[0][po]で表現可能となる var start = Maps.newGeocoder().geocode(point[0][po-1])['results'][0]['geometry']['location']['lat']+","+Maps.newGeocoder().geocode(point[0][po-1])['results'][0]['geometry']['location']['lng'] var end = Maps.newGeocoder().geocode(point[0][po])['results'][0]['geometry']['location']['lat']+","+Maps.newGeocoder().geocode(point[0][po])['results'][0]['geometry']['location']['lng'] // 地図作成のコードをまとめて変数宣言 var directionFinder = Maps .newDirectionFinder() .setAlternatives(true) // ベストパスだけではなく、代替経路も出力する .setLanguage('ja') // 日本語設定 .setOrigin(start) // start変数を始点に設定 .setDestination(end) // end変数を終点に設定 .setMode(Maps.DirectionFinder.Mode.DRIVING) // 自動車利用に設定。他、DRIVINGをWALKINGに変更で徒歩になる。 .setDepart(jikan) // jikan変数を出発時刻に設定 .getDirections().routes; // 地図作成後、最短距離のものを変数宣言する // xx変数で地図作成のコードを利用してルート検索を実行する // var xx = directionFinder.getDirections() // ルート検索の中で最短距離にソートで並び替えを実行。nearestRoute.legs[0]で最短のものが表示される。 // nearestRoute.legs[0].コード名で最短のもので画像作成などを実行可能となる。 const nearestRoute = directionFinder.sort((a,b)=> a.legs[0].distance.value - b.legs[0].distance.value)[0] let map = new Maps.newStaticMap() map.setSize(400 , 300) .setLanguage('ja') .setPathStyle(3, Maps.StaticMap.Color.Blue , null) // 幅、線の色、塗りつぶしの色 .addPath(Maps.decodePolyline(nearestRoute.routes[0].legs[0].steps[0].polyline.points)) 以降画像貼り付け等のコードのため省略。
試したこと
最後のコードの
.addPath(Maps.decodePolyline(nearestRoute.routes[0].legs[0].steps[0].polyline.points))
の部分に問題があることはデバッグで分かりました。
しかし、routes~の部分をlegsのみにする等をしましたが、処理が同じように止まってしまいます。
エラーの原因を調べようにも、同じような処理を目指すサイトが見つからないため、どのように修正すべきかわからなくなってしまいました。
これが初めてのGAS作成で、1~2か月かけて色々調べていますが、完全にお手上げ状態です。
お手数をおかけしますが、問題点が複数にわたる場合は、再度調べますので、参考できるサイトをご存知でしたらご教授いただけませんでしょうか。

回答1件
あなたの回答
tips
プレビュー