📍
GAS 緯度経度を取得するカスタム関数
訪問するリストをもとにGoogleマップに住所を一件一件入れて場所を調べている人が社内にいるという情報があり、これはGASで解決しようと思いカスタム関数を作成することにしました。
できたもの
住所や施設名が入力されているセルを引数にgeocoder関数を実行すると緯度経度が取得できます。
関数使用例
コード
コード.gs
function geocoder(cell) {
try{
const response = Maps.newGeocoder().geocode(cell)
if(response['results'][0] != null){
return response['results'][0]['geometry']['location']['lat']+","+response['results'][0]['geometry']['location']['lng'];
}
}catch(e){
return "error";
}
}
解説
緯度経度を取得するツールはいくつかありますが、GAS用に用意されているクラスを見つけたのでそちらを利用しました。
Google Maps APIが一番スタンダードかと思いますが、クレジット登録しないといけないので大変助かりました。
サンプルコードも用意されているのでコピペしてちょちょッと変えれば完成でした。
今回は緯度経度だったので、言語の設定はしなかったですが、住所を取得したい時は日本語に設定する方がよさそうです。
レスポンスは下記のような感じです。
{
results=[
{
place_id=ChIJ89TugkeMGGARDmSeJIiyWFA,
formatted_address=1-chōme-3-61 Kōraku,Bunkyo City, Tokyo 112-0004,Japan,
geometry={
location_type=ROOFTOP,
location={
lat=35.7056396,
lng=139.7518913
},
viewport={
southwest={
lng=139.7509571697085, lat=35.7032226697085
},
northeast={
lng=139.7536551302915, lat=35.7059206302915
}
}
},
partial_match=true,
plus_code={compound_code=PQ42+7Q Bunkyo City, Tokyo, Japan, global_code=8Q7XPQ42+7Q},
address_components=[
{
long_name=61, short_name=61, types=[premise]
},
{
short_name=3,
types=[political, sublocality, sublocality_level_4],
long_name=3
},
{
short_name=1-chōme, long_name=1-chōme, types=[political, sublocality, sublocality_level_3]
},
{
types=[political, sublocality, sublocality_level_2], long_name=Kōraku, short_name=Kōraku
},
{
short_name=Bunkyo City, types=[locality, political], long_name=Bunkyo City
},
{
types=[administrative_area_level_1, political], short_name=Tokyo, long_name=Tokyo
},
{
short_name=JP, types=[country, political], long_name=Japan
},
{
types=[postal_code], long_name=112-0004, short_name=112-0004
}
],
types=[establishment,point_of_interest,tourist_attraction]
}
],
status=OK
}
レスポンスから緯度経度が書いてあるところを指定して、カンマでつなげてリターンしたら、スプレッドシート側の値が緯度経度になります。
このシートを元にGoogleマイマップにインポートしたらマッピング完了です。
所感
スプレッドシートは便利な関数が多いですが、用意されている関数ではできないちょっとした
こともカスタム関数を作成して使えば大変便利になりました。
緯度経度が欲しいといったシーンもコピペして貼り付ければ使えるのでお手軽です。
Discussion