見出し画像

GAS - 住所から緯度経度

久しぶりに GAS に関する記事です!✏

東京へ来て、だいぶ生活も慣れてきましたが、雨の満員電車が辛い!!笑

そして、車にもっと乗りたい…。
ということを日々考えながら、おしゃれカフェめぐりをしています笑

すでに動画を上げているプログラムです!

[0] 準備

次のリンクから、Google スプレッドシート のコピーを作成してください!

コピーしたファイルは、↓みたいな感じ!

今回は、A列に住所、B列に緯度経度が出力されるようになっています!

[1] プログラム解説

拡張機能 ▶ Apps Script を開いてもらうと、次のようなプログラムが入っています!

// 引数として住所を受け取り、その緯度と経度を返す関数
function getGeocode(address) {
  var response = Maps.newGeocoder().geocode(address);

  // 結果の確認
  if (response.status == 'OK') {
    var result = response.results[0];
    var latitude = result.geometry.location.lat;
    var longitude = result.geometry.location.lng;
    return [latitude, longitude];
  } else {
    return [null, null];
  }
}

// スクリプトの主要部分
function main() {
  // スプレッドシートの取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();
  
  for (var i = 1; i < values.length; i++) {
    var address = values[i][0]; // 住所が1列目にあると仮定
    var geocode = getGeocode(address);
    
    // 結果をスプレッドシートに書き込む
    if (geocode[0] == null || geocode[1] == null) {
      sheet.getRange(i + 1, 2).setValue('false');
    } else {
      sheet.getRange(i + 1, 2).setValue(geocode[0] + ',' + geocode[1]);
    }
  }
}

[1-1] 解説!

ここが、主要なプログラムになっています!

// スクリプトの主要部分
function main() {
  // スプレッドシートの取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();
  
  for (var i = 1; i < values.length; i++) {
    var address = values[i][0]; // 住所が1列目にあると仮定
    var geocode = getGeocode(address);
    
    // 結果をスプレッドシートに書き込む
    if (geocode[0] == null || geocode[1] == null) {
      sheet.getRange(i + 1, 2).setValue('false');
    } else {
      sheet.getRange(i + 1, 2).setValue(geocode[0] + ',' + geocode[1]);
    }
  }
}

まず、スプレッドシート の取得として、

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();

があります!
ここで、住所が入っている、この スプレッドシート の情報を取得します。

そして、住所が1列目に入っているはずなので、1行ずつ処理を始めていきます。

  for (var i = 1; i < values.length; i++) {
    var address = values[i][0]; // 住所が1列目にあると仮定
    var geocode = getGeocode(address);

このとき、

var geocode = getGeocode(address);

は、何を表しているのかというと、最初に書かれていた

// 引数として住所を受け取り、その緯度と経度を返す関数
function getGeocode(address) {
  var response = Maps.newGeocoder().geocode(address);

  // 結果の確認
  if (response.status == 'OK') {
    var result = response.results[0];
    var latitude = result.geometry.location.lat;
    var longitude = result.geometry.location.lng;
    return [latitude, longitude];
  } else {
    return [null, null];
  }
}

の部分を表しています!
住所から緯度経度を取得している部分は、この関数になります。

そして、それをB列に順番に入力させています。

    // 結果をスプレッドシートに書き込む
    if (geocode[0] == null || geocode[1] == null) {
      sheet.getRange(i + 1, 2).setValue('false');
    } else {
      sheet.getRange(i + 1, 2).setValue(geocode[0] + ',' + geocode[1]);
    }

あえて、1つのセルに、カンマで区切って入れています。
これは、AppSheet で応用することを見越しているからです。

AppSheet に限らずなんですけど、緯度経度を扱うときに、カンマで区切った形で扱うことのほうが多いので。

[2] 実行

実行するときは、関数を main に変えてから実行してください!

そして、最初は権限の承認がありますので、わからない方はこちらから確認してください。

[3] 出力結果

次のようになります!

住所が見つからなければ、FALSE とするようにしています!

また、漢数字を使うと、少しずれてしまうようです…。

ぜひご活用ください!

また、今後プログラムは GitHub で管理していくことにしました!
過去のものも少しずつ入れていきたいと思います!

プロフィール

Twitter

GitHub

Facebook

ポートフォリオ

YouTube チャンネル

いちばんやさしい Google Apps Script


何かと0から1を作るのは大変だと思います。学校はどこも似たような問題課題に対応していると思います。それなのに、先生って自分だけで頑張ろうとするんですよね。ボクの資料やnoteが1になって、学校ごとの現状に合わせてカスタムしていただければと思います‼️