前回取得した住所リストに、緯度経度を追加したいと思います。
Google Apps Script に標準搭載されているMaps.newGeocoder().geocode()を使うと、設定不要ですぐ使えるので簡単です。
ただし、利用上限がおそらく1,000~1,500件/日に制限されていることや、精度が若干緩いといったデメリットがあります。
取得したリストは約15万件あるので、全部これで変換するのは現実的ではありません。
が、件数が少なければ有用なものですから、記録しておくことにします。
GAS作成
拡張機能>Apps Script で新しいGASを開きます。

function myFunction() {
}
と書いてある部分を消去し、以下のスクリプトを貼り付けます。
処理するのに最大実行時間(通常は6分)を超えるとエラーが出るので、念のため
LIMIT = 100
と設定してあります。
function fillLatLngUsingGeocoder() {
const SHEET_NAME = "all_shop_list";
const LIMIT = 100;
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
const data = sheet.getDataRange().getValues();
const headers = data[0];
const addressCol = headers.indexOf("address");
const latCol = headers.indexOf("Latitude");
const lngCol = headers.indexOf("Longitude");
if (addressCol === -1 || latCol === -1 || lngCol === -1) {
Logger.log("必要な列が見つかりません。");
return;
}
let updatedCount = 0;
for (let i = 1; i < data.length && updatedCount < LIMIT; i++) {
const row = data[i];
const latitude = row[latCol];
const longitude = row[lngCol];
const address = row[addressCol];
if (latitude === "" && longitude === "" && address) {
const location = Maps.newGeocoder().geocode(address);
if (location.status === "OK" && location.results.length > 0) {
const loc = location.results[0].geometry.location;
sheet.getRange(i + 1, latCol + 1).setValue(loc.lat);
sheet.getRange(i + 1, lngCol + 1).setValue(loc.lng);
updatedCount++;
Utilities.sleep(150); // レート制限対策
} else {
Logger.log(`ジオコーディング失敗: ${address} - ステータス: ${location.status}`);
}
}
}
Logger.log(${updatedCount} 件の緯度経度を取得しました。);
}
一旦、保存アイコンを押下すると、実行可能になります。

初回のみ、権限の承認が必要になります。
実行アイコンをクリックすると、「承認が必要です」と表示されるので、[権限を承認] を押下します。

[アカウントの選択] 画面で、自分のアカウントを選択します。
「このアプリはGoogleで確認されていません」と表示されたら、右下にある [詳細] の文字を押下します。
「リスクを理解し、デベロッパー(Googleアカウント)を信頼できる場合のみ、続行してください。」と表示されたら、下にある [無題のプロジェクト(安全ではないページ)に移動] の文字を押下します。
「無題のプロジェクト が Google アカウントへのアクセスを求めています」と表示されたら、[続行] を押下すると、GASを実行できるようになります。

プロジェクトの名前を [緯度経度変換] と変えておきました。

スクリプトを実行すると、F列, G列に緯度と経度が入力されます。

コメント