2022/07/11に更新

【GASで防災】住所から標高を調べる

地図スプレッドシート

住所・地名リストからそれぞれの標高を調べるGoogle Apps Scriptです。洪水、浸水のリスク調査などに使えるかもしれません。

こんな悩みを解決します


  • 避難所や各支店、支所の標高・海抜が何メートルか調べて災害リスクを把握したい

用意するもの


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

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


  • A列に記載された地名をもとに、B列に標高を追記できます。
  • 地名ではなく住所でも問題ありません。

使い方


1.リストの準備

標高といえば山かなと思い、まずは有名な山。あとは高層建造物、海抜マイナスメートルの地点も入れてみました。

2.スクリプトの実行

上のメニューにある「スクリプト実行」から「地名から標高を取得する」を実行します。

3.結果の確認

標高が出力されました。単位はメートルです。
富士山は一般的には3,776メートルとされていますが、帰ってきた値は約3730メートルと、ちょっとずれがあるようです。
海外の山も誤差がありつつもほぼ正解が返っていますね。
東京タワーとスカイツリーは、建造物自体の高さは標高とは関係ないので、こちらも予想通り。
海抜マイナスメートル地点もちゃんと返ってきてすごい。

スクリプト


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

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

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

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

  // メニューに追加するボタン
  menu.addItem('地名から標高を取得する', 'get_elevation_from_place_name');

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


function get_elevation_from_place_name() {

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

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

  // シートに入力されている地名を取得する。使用されている範囲のオブジェクトを取得
  let range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());

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

  // 地名の数だけループ。1行目は項目名なのでiの初期値は1。
  for (let i = 1; i < values.length; i++) {

    // 地名からジオコーディングするが、失敗した場合にそなえてtry catchする。失敗した場合はスキップする。
    try {

      // 地名から座標を取得する
      let geocode = Maps.newGeocoder().geocode(values[i][0]);
      let loc_lat = geocode['results'][0]['geometry']['location']['lat'];
      let loc_lng = geocode['results'][0]['geometry']['location']['lng'];

      // 座標から標高を取得する
      let elevation = Maps.newElevationSampler().sampleLocation(loc_lat, loc_lng);

      // 地名の右のセルに書き込む。
      range = sheet.getRange(i + 1, 2);
      range.setValue(elevation['results'][0]['elevation']);

    } catch (e) {

      // ジオコーディングに失敗した場合はスキップする
      continue;

    }
  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

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