4

私は現在働いているgoogle-apps-scriptとgoogle appsで一般的な作業を開始しています。私はこの問題を解決するためにstackoverflowで検索して検索してきました。私はできるだけ明確に説明しよう!MapsでGoogle-App-ScriptでAPIキーを使用する方法方法?

ルート内のさまざまなポイント間の合計距離を計算するGoogleスプレッドシートがあります。このような何か:

Example-google-spreadsheet

は、だから私のGoogleのスクリプトアプリでは、私は、コードのこの部分を持っている:

var directionFinder = Maps.newDirectionFinder(); 
    directionFinder.setMode(Maps.DirectionFinder.Mode.DRIVING); 
    directionFinder.setOrigin(origin); 
    directionFinder.setDestination(destination); 

私は関数を実行し、時には作品、時にはません。私が私のGoogleコンソールの開発者に行くときに私を悩ますものは、私のAPI管理では、私は動きを見ません。 GoogleコンソールでAPIを有効にしていても、何も起こりません。私が知っている

は、まさにこれらのリンクの場合と同じである:このリンクで

Maps.newDirectionFinder() Exceeded Daily Request Quota

が、私はエラー情報が推奨していますように私が要求に私のAPIを追加する方法を理解していません。この一

API key in Script Editor

、コードは私のために働いたと私は私のAPIの管理者に運動を参照してください。

問題は、URLfetchを使用せずにMapsメソッドを使用することですか?マップを使う私は何も起こっていないと思うし、それがいつでも動作します。

私は、マップの方法があるようなもの見ている:私はここに私のPROJECTIDとAPIキーを入れてみましたが、私はそれがなかったと思う

Maps.setAuthentication(clientIdを、signingKey)

を何もしない。

私はこれに新しいので、多分私は基本的なものをスキップしています!

ありがとうございました!私は、APIキーを持っていないと私はこの今日で遊ん

答えて

-1

);私は願っています

は、私はあなたが理解していない何かを答える多かれ少なかれ明らかです。それは本当に重要な見て、方向の応答here私はthis tutorialからコピーし、いくつかの私は自分自身を考え出した。ポイント配列に関連するものの多くはまだ私にとって謎のビットですが、幸いなことにチュートリアルを書いた人はそれを理解していますので、それを動作させるためにインオーダーする必要はありませんでした。

ここに私のコードです。

function Maps1() 
{ 
    var s = '',t = ''; 
    var sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Maps1'); 
    var rng = sht.getDataRange(); 
    var rngA = rng.getValues(); 
    var origin = rngA[1][0]; 
    var destination = rngA[rngA.length-1][0]; 
    var waypoints = 0; 
    var points = []; 
    var r1 = new RegExp('<b>', 'g'); 
    var r2 = new RegExp('</b>', 'g'); 
    var r3 = new RegExp('<div style="font-size:0.9em">', 'g'); 
    var r4 = new RegExp('</div>', 'g'); 
    var currentLabel = 0; 
    var directions = Maps.newDirectionFinder(); 
    var map = Maps.newStaticMap().setSize(600,400); 
    directions.setOrigin(origin); 
    for(var i=2;i<rngA.length-1;i++) 
    { 
    directions.addWaypoint(rngA[i][0]); 
    waypoints++; 
    } 
    directions.setDestination(destination); 
    directions.setMode(Maps.DirectionFinder.Mode.DRIVING); 
    var cnt = 1; 
    rngA[cnt][1]= 0; 
    rngA[cnt][2]= 0; 
    var results = directions.getDirections(); 
    for (var i in results.routes) { 
    for (var j in results.routes[i].legs) { 
     rngA[++cnt][1]= Number(results.routes[i].legs[j].distance.value) * 0.000621371;//this converts from meters to miles 
     rngA[cnt][2]= results.routes[i].legs[j].duration.text; 
     for (var k in results.routes[i].legs[j].steps) { 
     var step = results.routes[i].legs[j].steps[k]; 
     var path = Maps.decodePolyline(step.polyline.points); 
     var text = step.html_instructions; 
     points = points.concat(path); 
     text = text.replace(r1, ' '); 
     text = text.replace(r2, ' '); 
     text = text.replace(r3, ' '); 
     text = text.replace(r4, ' '); 
     t += '<br />' + ++currentLabel + ' - ' + text + '<span style="color:red;">Distance: </span>' + step.distance.text + '<span style="color:red;"> Duration: </span>' + step.duration.text ; 
     } 
    } 
    } 
    var lpoints=[]; 
    if (points.length < 200) 
    { 
    lpoints = points; 
    } 
    else 
    { 
    var pCount = (points.length/2); 
    var step = parseInt(pCount/100); 
    for (var i = 0; i < 100; ++i) 
    { 
     lpoints.push(points[i * step * 2]); 
     lpoints.push(points[(i * step * 2) + 1]); 
    } 
    } 
    if (lpoints.length > 0) 
    { 
    var pline = Maps.encodePolyline(lpoints); 
    map.addPath(pline); 
    } 

    s += '<img src="' + map.getMapUrl() + '" /><br />'; 
    s += t; 
    rng.setValues(rngA); 
    SpreadsheetApp.flush(); 
    var totalDistance = 0; 
    for(var i=2;i<rngA.length;i++) 
    { 
    totalDistance += Number(rngA[i][1]); 
    } 
    s += '<br /> Total Distance: ' + totalDistance + ' Miles'; 
    dispStatus('Route Data', s, 1200, 500); 
} 

以下の機能は、地図とすべてのルートを表示する方法です。

function dispStatus(title,html,width,height,modal) 
{ 
    var title = typeof(title) !== 'undefined' ? title : 'No Title Provided'; 
    var width = typeof(width) !== 'undefined' ? width : 400; 
    var height = typeof(height) !== 'undefined' ? height : 300; 
    var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>'; 
    var modal = typeof(modal) !== 'undefined' ? modal : false; 
    var htmlOutput = HtmlService 
    .createHtmlOutput(html) 
    .setWidth(width) 
    .setHeight(height); 
if(!modal) 
{ 
    SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title); 
} 
else 
{ 
    SpreadsheetApp.getUi().showModalDialog(htmlOutput, title); 
} 
} 

これは私のスプレッドシートは次のようになります。あなたがしなければならないのは、ルートがカラム1に見出しの下の位置を始め配置し、あなたが望む任意の中間地点として仕上げるれ

enter image description here

列1の最後の最終目的地です。スクリプトはあなたのためにテーブルの残りの部分を埋めるだけでなく、別のダイアログを使用して、下部に道順と合計距離の地図を表示します。

ここには、地図といくつかの指示を示すダイアログの一部の画像があります。

enter image description here

+0

あなたの答えのためのあなたのクーパーありがとう、そして後半に答えるため申し訳ありません。あなたのプログラムはすばらしく見えますが、実際は私がやっていることと非常によく似ています。それは私だけです、私は距離だけを計算しています。私の質問は次のようなものです:1日に計算できる距離の距離はどれくらいですか?つまり、有効なAPI権限を確立する必要があるとGoogleからあなたに伝えられる瞬間があるはずです。 APIなしで試してみると、20〜30のようにすることができます。それはいつも変わります...なぜ20〜30回のリクエストをGoogleに許可するのですか?APIを入れたら、2500回のリクエストができます。 – CarlosGarcia

+0

Mapsメソッドを使用してAPIキーを配置する方法がわかりません。 20〜30回しか使用できない場合、このMapsメソッドを作成する際のポイントは何ですか? Maps.setAuthentification(API_KEY)のようなものがなければなりません...実際にはこの機能は存在しますが、Google Businessアカウントやそのようなものに対してのみ存在します。 – CarlosGarcia

+0

Theresはまだ私が知っていることはほとんどありません。私は他の人の答えからいくつかのことを学ぶためにこのサイトの周りにぶら下がっています。 – Cooper

関連する問題