住所一覧から緯度経度を求める(その1)

Google Apps Script

前回取得した住所リストに、緯度経度を追加したいと思います。

Google Apps Script に標準搭載されているMaps.newGeocoder().geocode()を使うと、設定不要ですぐ使えるので簡単です。
ただし、利用上限がおそらく1,000~1,500件/日に制限されていることや、精度が若干緩いといったデメリットがあります。

取得したリストは約15万件あるので、全部これで変換するのは現実的ではありません。
が、件数が少なければ有用なものですから、記録しておくことにします。

GAS作成

拡張機能>Apps Script で新しいGASを開きます。

Apps Script

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列に緯度と経度が入力されます。

経度緯度表示

コメント

タイトルとURLをコピーしました