見出し画像

Googleスプシで住所を緯度経度に変換する方法(おまけ有料)

割引あり

Googleスプレッドシート上で住所テキストから緯度経度を取得するカスタム関数を作成しました。「=GETLATLONG(住所のセル)」で使えて便利です。

  • Google MapのAPIを使う方法

    • こちらがおすすめ

    • 結果の精度が高い

    • 月40,000回まで無料

  • 国土地理院のジオコーディングAPIを使う方法

    • 結果に誤差がある(~数百m程度)

    • APIキーの用意など必要なく、準備不要で楽

2つのやり方を紹介していきますが、国土地理院の方はおまけなので、興味があればコーヒー代ください~☕️


Google Mapを使って緯度経度を取得する方法

先述の通り、国土地理院のデータには、数メートル〜100メートル程度の誤差があります。用途によっては十分、用途によっては不十分ですね。

現状、Google Mapのデータを参照するのが、最も精度が高いと言われているようです。

そのため、基本的にはGoogle Mapからデータを取得するのがおすすめです。

【GCP】料金はある程度まで無料

Google MapはAPIで利用すると有料なのですが、GCP(Google Cloud)には月200ドルの無料範囲があり、月間40,000回までは無料で使えます。

個人利用の範囲内では、全く問題ないと思います。

スクリプト(コピペでOK)

/**
 * 住所から緯度経度を取得する
 *
 * @param {string} address 住所
 * @return {string} 緯度と経度(カンマ区切り)
 * @customfunction
 */

function GETLATLONG(address) {
  // 住所が空の場合は終了
  if (!address) {
    return "";
  }

  // キャッシュからデータを取得
  var cache = CacheService.getScriptCache();
  var cached = cache.get(address);
  if (cached != null) {
    return cached;
  }
  
  // APIキー
  var apiKey = "YOUR_API_KEY";
  
  // ジオコーディングAPIのURL
  var url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURIComponent(address) + "&key=" + apiKey;
  
  // APIをコール
  var response = UrlFetchApp.fetch(url);
  var json = JSON.parse(response.getContentText());
  
  // ステータスがOKでない場合は終了
  if (json.status !== "OK") {
    return ""; 
  }
  
  // 緯度経度を取得
  var lat = json.results[0].geometry.location.lat;
  var lng = json.results[0].geometry.location.lng;
  var result = lat + "," + lng;

  // 結果をキャッシュに保存(6時間有効)
  cache.put(address, result, 21600);
  
  return result;
}

実装のポイント

興味ある方だけ読んでください。読まなくてもいいです。

  • カスタム関数 GETLATLONG を定義。引数に住所を受け取る。

  • Google Maps Geocoding APIを使用。APIキーが必要。

  • ステータスがOKの場合のみ、結果から緯度経度を取得。

  • 住所が空の場合は空文字を返して終了。

  • 緯度と経度をカンマ区切りの文字列で返す。

  • CacheService を使ってAPIの結果をキャッシュに保存。同じ住所の場合はキャッシュから結果を返す。

  • キャッシュの有効期限を6時間(21600秒)に設定。

この関数を使うと、Googleスプレッドシート上のセルに住所を入力するだけで、緯度経度を表示できます。

キャッシュ機能を使うことで、同じ住所の場合にはAPIのコール回数を減らせるよう考慮しました。

使い方

  1. Google Cloud Consoleで、Google Maps Geocoding APIを有効化し、APIキーを取得。

  2. Googleスプレッドシートを開き、「ツール」>「スクリプトエディタ」からGoogle Apps Scriptエディタを開きます。

  3. 上記のコードをスクリプトエディタに貼り付け、YOUR_API_KEYの部分を取得したAPIキーに置き換えます。

  4. Googleスプレッドシート上で、住所のセルの隣のセルに=GETLATLONG(住所のセル)と入力。

注意点:料金に注意

  • 月$200の無料枠を超えると課金が発生します(別のAPI料金も合算)

  • 規約上、無料枠の対象外となるゲーム・ライドシェアリング・アセットトラッキングなどの用途では利用できません

おまけ:緯度と経度を切り分ける関数

緯度経度を1つのセルに出力していますが、別々に格納したいことがあると思います。正規表現を使った、簡単な緯度経度の切り分け関数も記載して置きます。

1. 緯度を教えてくれる関数

=REGEXEXTRACT(A2,"^[^,]*")

「A2」の部分は、上記の緯度経度カスタム関数を使ったセルを指定してください。

2. 経度を教えてくれる関数

=REGEXEXTRACT(A2,",\s*(.*)$")

同様に、「A2」の部分は、緯度経度カスタム関数を使ったセルを指定してください。


参考になったら❤️ボタンを、お願いします。


国土地理院のAPIを使って緯度経度を取得する方法

続いて、国土地理院Verです。

国土地理院で無料のAPIとして提供してくださっているおかげで、誰でも完全無料で利用することができます。

利用の際は、国土地理院のAPI利用規約に同意した上で利用開始してね。

使い方

Google Mapのやり方とは違い、APIキーが不要なのでコードをコピペする以外の準備が必要ないのがGoodポイント。

  1. Googleスプレッドシートを開き、「ツール」>「スクリプトエディタ」からGoogle Apps Scriptエディタを開きます。

  2. 下記のコードをコピーしてエディタに貼り付け、保存します。

  3. スプレッドシートに戻り、住所のセルの隣のセルに以下の関数を入力します。(例:住所が「A1」セルにある場合、「B1」セルに =GETLATLONG(A1) と入力)

  4. エンターキーを押すと、関数が実行され、緯度と経度がカンマ区切りで返ってきます。

スクリプト(コピペでOK)

ここから先は

1,425字

この記事が気に入ったらサポートをしてみませんか?