前提・実現したいこと
現在GASを利用し、スプレッドシートに記載されている経度、緯度の数値を読み取って変数へ代入、その変数からGoogleMapへ位置情報を渡して地図の中心に表示するアプリの作成をしています。
スプレッドシートの内容
地名 | 緯度 | 経度 |
---|---|---|
横浜駅 | 35.465786 | 139.622313 |
発生している問題・エラーメッセージ
変数をGoogleMapへ渡す事に失敗しているらしく、地図が表示されない
該当のソースコード
今回は外部ファイル形式を利用しアプリを作成しています。
index.html(最初の部分がGAS内でHTMLファイルを作成した際のデフォルトのままになっています)
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>テスト</title> </head> <body> <h1>Google Map</h1> <p>ここにGPSで取得した情報を表示します。</p> <div id="sample" style="width:900px; height:500px; margin: 10px auto;" ></div> <!--マップを表示させるdiv--> <?!= HtmlService.createHtmlOutputFromFile('js2').getContent(); ?> <!-- 記述した箇所('js1')のHTMLファイルを読み込む --> <p>過去のGPS表記一覧</p> </body> </html>
コード.gs
function doGet(request) { var template = 'index'; return HtmlService.createTemplateFromFile(template).evaluate(); }
js.html
問題のコード:このコードのfor文からLaatLng(lat,lng);へ値を渡すのに失敗していると考えています。
<script> var map; var point1 = []; var infoWindow = []; function initMap() { var sheet = SpreadsheetApp.getActiveSheet(); var lRow = sheet.getLastRow(); //最終行を取得する for( var i = 1; i <4; i++){ var getVal = sheet.getRange(lRow,i).getValue(); //IRowには最終行を示す値を取得しており、列部分をfor文で回せば全ての最終行の値を取得する事が可能である if( i == 1){ var ame = getVal; }else if( i == 2){ var lat = getVal; }else if( i == 3){ var lng = getVal; } } var latlng = new google.maps.LatLng(lat,lng);//中心の緯度, 経度 var map = new google.maps.Map(document.getElementById('sample'), { zoom: 14,//ズームの調整 center: latlng//上で設定した中心 }); var marker = new google.maps.Marker({ position: latlng, map: map }); } </script> <script src="https://maps.googleapis.com/maps/api/js?key=(API)=initMap"></script> <!-- 取得したAPIを利用する-->
試したこと
js.htmlを以下のコードに変更した際には地図が表示されているので大まかな流れに問題はないと思っています。
<script> var map; var point1 = []; var infoWindow = []; function initMap() { var lat = 35.465786; var lng =139.622313; var latlng = new google.maps.LatLng(lat,lng);//中心の緯度, 経度 var map = new google.maps.Map(document.getElementById('sample'), { zoom: 14,//ズームの調整 center: latlng//上で設定した中心 }); var marker = new google.maps.Marker({ position: latlng, map: map }); } </script> <script src="https://maps.googleapis.com/maps/api/js?key=(API)=initMap"></script> <!-- 取得したAPIを利用する-->
値を取得する点に関しては以下のコードでログに数値が表示されているので問題ないと考えています
function final(){ //最終行を取得する関数final var sheet = SpreadsheetApp.getActiveSheet(); var lRow = sheet.getLastRow(); //最終行を取得する for( var i = 1; i <4; i++){ var getVal = sheet.getRange(lRow,i).getValue(); //IRowには最終行を示す値を取得しており、列部分をfor文で回せば全ての最終行の値を取得する事が可能である if( i == 1){ var ame = getVal; }else if( i == 2){ var lat = getVal; }else if( i == 3){ var lng = getVal; } } Logger.log(lat); Logger.log(lng); }
考えた問題点
1,ドキュメントなどを見るに、緯度経度の数値をコード内に直接指定する必要があり、やろうとしている事がそもそも仕様上出来ない。
2,スプレッドシートから渡された数値が、型などの問題からnew google.maps.LatLng(lat,lng);で読み込まれてない。
3,スコープとか別部分で問題を起こしている。
個人的には1,2どちらかが主要な原因だと考えています。
補足情報
インデントなのですが、全体を選択後tabキーで整えられると書いてあったので実行した所、何故か全てのコードが左寄せになってしまい、見難いにも程があるので一部手動で直しています。見難いコードで申し訳ありません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/09 05:47