Google My Map にピンを立てる(カテゴリー追加)

Google Apps Script

Googleスプレッドシートからダウンロードしたcsvファイルを使い、Google My Map にピンを立てる ことは可能になりました。

しかし店名だけではお店のジャンルが分からないことも多いため、csvを作成する際にカテゴリーのデータを追加することにしました。

カテゴリー対応表作成

住所一覧から緯度経度を求める(その2)で既に表をお見せしましたが、その表の作成方法を記します。

リストを入手したサイトを開き、任意の地域を開きます。

お店を探す

[Ctrl + U] で、ソースを表示させます。
内容を見ていくと、お店のカテゴリー一覧を書いた場所があります。
これをもとに、対応表を作りました。この部分をコピペして、不要部分を置換で消すと楽です。

ジャンル一覧

スプレッドシートに、[category]シートを作成します。

カテゴリーシート作成

上で調べた内容を表にします。

対応表

GAS書き換え

[all_shop_list]シートと [tmp]シートのH列に、それぞれ [category_J] と入力しておきます。

category_J項目追加

以下のGASスクリプトを実行します。

function processGeocodeInTmpSheet_CategoryJ() {
  const TMP_SHEET_NAME = "tmp";
  const CATEGORY_SHEET_NAME = "category";
  const LIMIT = 500;

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(TMP_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");
  const categoryCol = headers.indexOf("category");
  const categoryJCol = headers.indexOf("category_J");

  if (addressCol === -1 || latCol === -1 || lngCol === -1 || categoryCol === -1 || categoryJCol === -1) {
    Logger.log("必要な列が見つかりません。");
    return;
  }

  // ▼ カテゴリ対応表の読み込み(A列: 数字, B列: 日本語カテゴリ名)
  const categorySheet = ss.getSheetByName(CATEGORY_SHEET_NAME);
  const categoryData = categorySheet.getRange("A2:B17").getValues();
  const categoryMap = {};
  categoryData.forEach(row => {
    categoryMap[row[0]] = row[1];
  });

  let updatedCount = 0;

  for (let i = 1; i < data.length && updatedCount < LIMIT; i++) {
    const row = data[i];
    const address = row[addressCol];
    const lat = row[latCol];
    const lng = row[lngCol];
    const category = row[categoryCol];
    const categoryJ = row[categoryJCol];

    // ▼ category_J を埋める(未入力のみ)
    if (category && categoryJ === "" && categoryMap[category]) {
      sheet.getRange(i + 1, categoryJCol + 1).setValue(categoryMap[category]);
    }

    // ▼ ジオコーディング(未入力の行のみ)
    if (address && lat === "" && lng === "") {
      const geo = Maps.newGeocoder().geocode(address);
      if (geo.status === "OK" && geo.results.length > 0) {
        const loc = geo.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}`);
      }
    }
  }

  Logger.log(`${updatedCount} 件の住所を処理しました。`);
}

日本語でのカテゴリーを入力できました。

カテゴリー入力

Google My Map に取り込み

[Google My Map にピンを立てる] を参照して、マップに取り込みます。

ログイン ‹ できることなら楽したい — WordPress

データ内容に日本語表記のカテゴリーを追加することができました。

日本語ジャンル追加

コメント

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