주소 목록에서 도달 예측 시간 계산(Google 스프레드시트 + Google Distance Matrix API)

목적



"어느 시간·한 장소를 기점으로 하여 여러 장소에 갈 경우 각각의 도착 예측 시간"을 일거에 계산하고 싶었다.
구체적으로 말하면, 정시 후에 회사 빌딩에서 여러 곳(일에 따라 다름)에 가는 경우에, 각각 언제쯤 도착할지, Google Map나 역 스파아토에서 일단 조사해 가는 것이 귀찮았으므로, 자동화 할 수 없을까라고 생각한 것이 시작입니다.

Google App Script의 이용은 처음이었으므로, 학습을 겸해 코딩했습니다.
정보 공유를 위해 본 기사를 작성했습니다. (어느 정도)

결론



산출할 수 있었습니다.
출발 시간에 「구한 이동 시간」을 가산하면 도착 예상 시간을 요구합니다.


내용



  이하의 코드에 따릅니다.
Google Distance Matrix API의 API 키는 Google Maps Distance Matrix API - API를 활성화하여 API 키 가져오기에서 얻을 수 있습니다.

※ 주 : URL 파라미터 중 "mode = 'transit'"만은 왠지 싱글 쿼트로 구하지 않으면 올바른 출력이 돌아 오지 않습니다.

gas1.gs
function calcDptTimeFromSpecificPlaces() {
  var colDst = 2;      // 住所列
  var colRes = 3;      // 結果出力列
  var APIKEY = "hoge"; // Google Distance Matrix APIのAPIキー

  var bk = SpreadsheetApp.getActiveSpreadsheet();
  var sh = bk.getActiveSheet();
  var rowLst = sh.getLastRow();

  for (var i = 2; i <= rowLst; i++) {   // 2行目から処理
    var org = "皇居"; // 起点となる場所
    var dst = sh.getRange(i, colDst).getValue();
    var url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=metric" + 
              "&language=" + "ja" +
              "&origins=" + org + 
              "&destinations=" + dst +
              "&mode=" + "'transit'" +
              "&departure_time=" + "1521220500" + // "2018/3/16 17:15:00" のUNIXタイム
              "&key=" + APIKEY;

    var res  = UrlFetchApp.fetch(url);
    var json = JSON.parse(res.getContentText());

    if (json["status"] == "OK") {
      var str_min = json["rows"][0]["elements"][0]["duration"]["text"];
      var min = str_min.replace("", '');   // "分"を除去
      min = "00:" + min + ":00";             // hh:mm:ss の形式にする
      sh.getRange(i, colRes).setValue(min);
    }
  }
}


과제·전망


  • 이동 시간 1시간 이상을 지원하지 않습니다.
  • 주소는 구구라고 손 입력하고 있습니다. 「황궁」은 API로 지나가지만, 가게나 회사명 등은 다니거나 다니지 않기 때문에. 그러니까 「지명으로부터 주소를 출력하는 API」 뭔가가 있으면, 지명 입력한 것만으로 도착 시간을 산출할 수 있게 되기 때문에, 드릴 것 같다.

  • 문헌


  • Google Maps Distance Matrix API - 시작 가이드

  • Google Maps Distance Matrix API - 개발자 가이드 : URL 파라미터 이해에 유용합니다.

  • teratail - Google Maps Distance Matrix API에서 mode에 transit을 지정하면 도보로 획득 : 'transit'을 싱글 쿼트로 오는 것은 여기에서 알았습니다.

  • Qiita - GoogleDriveSpreadSheet의 주소록을지도에 플롯 @ 타테스케 : 비슷한 일을 하고 있는 사람 있는 거야~라고 생각하면, 친구였다.
  • 좋은 웹페이지 즐겨찾기