2022/05/02に更新

【GASで時短】住所を緯度経度に変換する

地図スプレッドシート

住所やランドマーク名、郵便番号から緯度・経度に変換するGoogle Apps Scriptです。稀に緯度経度が必要になることがあるので作ってみました。

こんな悩みを解決します


  • 住所から緯度経度を調べたいが、死ぬほど面倒なのでなんとかしたい

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • 住所から緯度、経度を求める事ができます。
  • 住所だけではなく、著名なランドマークであればその名称でも、郵便番号でも変換可能です。

使い方


1.事前準備

住所のリストを用意します(サンプルコードはA列の2行目から記載されていることを前提にしています)。
いろいろなパターンを用意してみました。

  • 国内で一つしかなく、特定可能な名称
  • 番地等が漢字表記のもの
  • 番地等が数字表記のもの
  • 特定不可能な一般名称
  • 都道府県名のみ
  • 国名のみ
  • 郵便番号
2.スクリプトの実行

さっそく実行してみます。
上のメニューにある「スクリプト実行」から「住所から緯度経度に変換する」を実行します。

B列以降に結果が書き込まれました。

「お寺」という特定が不可能な名称は「ZERO_RESULTS」が返ってきましたが、これ以外は正しいレスポンスが返ってくるようです。

西新宿の住所は東京都庁のものだったんですが、「東京都庁」で検索した結果とわずかにずれていますね。
都道府県や国名を入れた場合はその中心の座標になるようです。
「日本」と入れた場合はこの位置でした。

郵便番号は探せないかと思って試したんですが、正しく返ってきますね・・・さすがGoogle先生・・・すごい。

3.注意点

今回使用しているジオコードの呼び出しは、Googleの無料ユーザーで1,000回/day、有償ユーザーで10,000回/dayの上限があります。
業務に組み込む場合はお気をつけください!

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00077/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('住所から緯度経度に変換する', 'geocoding');

  // メニューを画面に追加する
  menu.addToUi();
}


function geocoding() {

  // アクティブなスプレッドシートを開く
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // アクティブなシートを開く
  const sheet = ss.getActiveSheet();

  // シートに書き込まれているデータを取得する。取得したい範囲はA列。
  let range = sheet.getRange(1, 1, sheet.getLastRow(), 1);

  // セルの値を取得する
  let values = range.getValues();

  // ジオコーディングするためのオブジェクトを取得
  const geocoder = Maps.newGeocoder();

  // 日本語に設定
  geocoder.setLanguage('ja');

  // A列の住所を1行ずつ処理していく
  for (let i = 1; i < values.length; i++) {

    // ジオコーディングを実行して値を受け取る
    let response = geocoder.geocode(values[i][0]);

    // 正常に変換できた場合はstatusにOKが入るので、これを使って条件分岐する
    if (response['status'] != 'OK') {

      // 変換に失敗した場合はエラーコードをB列に書き込む
      range = sheet.getRange(i + 1, 2, 1, 1);
      range.setValue(response['status']);

    } else {

      //変換に成功した場合は緯度、経度を取得する
      let latitude = response['results'][0]['geometry']['location']['lat'];
      let longitude = response['results'][0]['geometry']['location']['lng'];

      // 動作確認用の検索URLを組み立てる
      let search_url = 'https://www.google.com/search?q=' + latitude + '+' + longitude;

      // 
      range = sheet.getRange(i + 1, 2, 1, 4);
      range.setValues([[response['status'], latitude, longitude, search_url]])

    }
  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp