住所やランドマーク名、郵便番号から緯度・経度に変換するGoogle Apps Scriptです。稀に緯度経度が必要になることがあるので作ってみました。
特にありません。今お使いのスプレッドシートに組み込めます。
住所のリストを用意します(サンプルコードはA列の2行目から記載されていることを前提にしています)。
いろいろなパターンを用意してみました。
さっそく実行してみます。
上のメニューにある「スクリプト実行」から「住所から緯度経度に変換する」を実行します。
B列以降に結果が書き込まれました。
「お寺」という特定が不可能な名称は「ZERO_RESULTS」が返ってきましたが、これ以外は正しいレスポンスが返ってくるようです。
西新宿の住所は東京都庁のものだったんですが、「東京都庁」で検索した結果とわずかにずれていますね。
都道府県や国名を入れた場合はその中心の座標になるようです。
「日本」と入れた場合はこの位置でした。
郵便番号は探せないかと思って試したんですが、正しく返ってきますね・・・さすがGoogle先生・・・すごい。
今回使用しているジオコードの呼び出しは、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]])
}
}
}