施設名称から緯度経度、住所を取得する【GASとMAP Service利用】
NearMe 小森です。久しぶりの投稿です。
2019年6月からこちらで働いており、仕事上使えそうなので作ってみました。
googlemapのマイマップにプロットした情報からいい感じに住所とか緯度経度とか取れると思っていたのですが、そう甘くはありませんでした(KMLファイルをダウンロードできるが場所によっては欲しい情報が入っていなかった)
どうしたもんかと調べてみたらGASで利用できるMAP Serviceがあったのでこちらを使ってみることにしました。
https://developers.google.com/apps-script/reference/maps/geocoder
function geocoder() {
const START_LOW = 2;
const FACILITY_CAL = 1;
const LAT_CAL = 3;
const LNG_CAL = 4;
const ADDRESS_CAL = 5;
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
var lastLow = spreadsheet.getLastRow();
for(var i=START_LOW; i<=lastLow; i++){
var facility = spreadsheet.getRange(i,FACILITY_CAL).getValue();
var geocoder = Maps.newGeocoder();
geocoder.setLanguage('ja');//'en'にすれば結果データが英語になる
var response = geocoder.geocode(facility);
if(response['results'][0] != null){
spreadsheet.getRange(i,LAT_CAL).setValue(response['results'][0]['geometry']['location']['lat']);
spreadsheet.getRange(i,LNG_CAL).setValue(response['results'][0]['geometry']['location']['lng']);
spreadsheet.getRange(i,ADDRESS_CAL).setValue(response['results'][0]['formatted_address']);
/** 住所取得が複雑になるので未使用
for(var j=0; j<=7; j++) {
if(response['results'][0]['address_components'][j] != null){
spreadsheet.getRange(i,ADDRESS_CAL + j).setValue(response['results'][0]['address_components'][j]['long_name']);
}
}
**/
}
}
}
ポイントはgeocode関数です。ここに文字列を入れると各種情報を返してくれます。「東京スカイツリー」といれても「東京都墨田区押上1丁目1−2」といれてもちゃんと東京スカイツリーの情報を返してくれます。(多少緯度経度はずれます。また、住所から「東京スカイツリー」という施設名は取得できません)
住所情報はresponse['results'][0]['address_components'][0]〜[7]に分割して入っているのですが、スポットによって増減するのでちょっと頑張らないといけなそうなので諦めました。データ構造はresponseを見てみてください。
こちらが取得した結果です。施設名を英語化したかったんですが、これは標準関数のgoogletranslate()を使えば特に問題なさそうです。