Eyes, JAPAN Blog > 【GAS】複数の施設名から住所と緯度経度を一括取得してGoogleスプレッドシートに反映する

【GAS】複数の施設名から住所と緯度経度を一括取得してGoogleスプレッドシートに反映する

Junichi Fujinuma

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。


藤沼です。皆さん、今日も元気にGoogle Apps Script(GAS)使っていますか?

以前はGoogleスプレッドシートで管理している当番の担当者に対して、メッセージングツールであるCisco Webex Teamsと連携させて、メンション付きのメッセージ(リマインダ)を送る事をGASを使って実現する方法を書きました。
http://www.nowhere.co.jp/blog/archives/20200313-070046.html

さて、今回はGASを使った地図に関する効率的な情報取得の方法をご紹介しします。

つい先日、全国に数百件ある施設の住所と緯度経度を1〜2時間ほどで調べて纏め上げる必要がある状況に直面しました。公的な施設(指定医療機関)だったのですが、そうした施設であっても残念ながら期待通りのフォーマットでデータが提供されている事は少ないです。大半はPDFだったり、CSVやAPIが提供されていても、当然のことながら全てのユースケースに対応できるわけでもなく。

そこでGoogle Apps Scriptの出番です。「地図」と聞くとGoogle Mapsを思い浮かべる方が多いことでしょう。確かに、Google Mapsで提供されているGoogle Maps APIにはジオコーディング(地名や住所から緯度・経度を調べる事)の機能があります。実はこの機能、Google Apps Scriptから呼び出すことができます。クラス名はその名の通りClass Geocoderです。

GASでClass Geocoderを使ってみよう

この記事では「Googleスプレッドシートに記載してある施設名から、住所や緯度経度を取得してシートに反映する」様なスクリプトの書き方をご説明します。初学者の方でも分かりやすいようにステップ・バイ・ステップで記載しておりますが、ほとんどの内容は後述の参考サイト様で解説されていること同じですので、そちらをご参照いただいても結構です。

1: 施設名一覧を作成する

Googleスプレッドシートで施設名の一覧を作成します。下記の画像のような構成の表を作って見てください。各列の見出しも図の通りにA列は施設名、B列は住所、C列は緯度、D列は経度、としてください。B〜D列は見出し以外は空欄でOKです。
※デモ用に会津地域の施設名を記載していますが、当然なんでもOKです。

2: スクリプトエディタを開く

Googleスプレッドシートのメニューからスクリプトエディタを開きます。

3: スクリプトを書く

エディタで下記のスクリプトを書く。緯度経度および住所を取得しているのが分かるかと思います。書き終わったら保存(Ctrl+s, Command+s)するのを忘れずに。

function geocoder() {
 const START_ROW = 2;
 const FACILITY_COL = 1;
 const ADDRESS_COL = 2;
 const LAT_COL = 3;
 const LNG_COL = 4;

 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('**スプレッドシートのシート名**');
 var lastrow = spreadsheet.getLastRow();
 
 for(var i=START_ROW; i<=lastrow; i++){

   var facility = spreadsheet.getRange(i,FACILITY_COL).getValue();
 
   var geocoder = Maps.newGeocoder();
   geocoder.setLanguage('ja');
 
   var response = geocoder.geocode(facility);
   
   if(response['results'][0] != null){
     spreadsheet.getRange(i,LAT_COL).setValue(response['results'][0]['geometry']['location']['lat']);
     spreadsheet.getRange(i,LNG_COL).setValue(response['results'][0]['geometry']['location']['lng']);
     spreadsheet.getRange(i,ADDRESS_COL).setValue(response['results'][0]['formatted_address']);
     
   }
 }
}

4: スクリプトを実行する

スクリプトを実行する。

なお、初回実行時は実行してよいか認可を求められます。

5: 実行結果を確認する

スプレッドシートに戻って、実行結果を確認します。住所および緯度経度が取得されているのが分かりますね。

上記のサンプル程度の件数では有り難みが実感できませんが、実際の私の作業では600件ほどの施設を調べる必要があり、それがものの2,3分で取得できました。楽。

6: 住所の不要部分を取り除く

ちなみに住所の冒頭にある「日本、〒xxx-xxxx 」が不要であれば、RIGHT関数とLEN関数を組み合わせる事で綺麗に取り除けます。下図はB2セルに整形前の住所が入力されている例ですが、任意のセルに「=RIGHT(B2,LEN(B2)-13)」と入力すればOKです。式の意味としては「B2セルに入力されている文字を、B2セルに入力されている文字数から13を引いた文字の数だけ、右側から取得する」という意味です。

GAS、便利ですね。もっと使っていきましょう。

参考サイト様:
note: 施設名称から緯度経度、住所を取得する【GASとMAP Service利用】

Comments are closed.