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 で管理していくことにしました!
過去のものも少しずつ入れていきたいと思います!