LoginSignup
4
3

More than 1 year has passed since last update.

GPS座標から住所を求める JXA(JavaScript for Automation)Ver.2

Last updated at Posted at 2023-04-18

農研機構の簡易逆ジオコーディングサービスがサービス終了

 同タイトルで3年ほど前にこんな記事を投稿していた。

このスクリプトを書くきっかけは、友人が FileMakerで写真のGPS情報から住所を調べるようにしたいという依頼があり、APIを調べている中で作成したものだった。
 その友人から、動かなくなった!との連絡があって、早速サイトに行ってみると

AGINFO ウェブサイトは廃止いたしました
ということだった。

代替え候補の Web API を探す

 探すといってもググるだけ。ChatGPT に聞くまでもない。
候補としたのは次の2つ。
. Google Maps Platform の ジオコーダ API
. Yahoo! の ジオコーダ API

 Google Maps API は一応、有償ではあるが、個人で通常の使い方であれば無料の範囲内で使えるし、取得できる情報も多い。
 Yahoo! API は、基本、無償で使える。
ということで、両方を試してみた。

ソースコード

Google Maps Platform API

RevGeoCode_Google.scpt
// 緯度、軽度から住所を求める
// Google Maps のサービスを利用
// 戻り値は JSON 形式

var app = Application.currentApplication()
app.includeStandardAdditions = true

const baseURL = '"https://maps.googleapis.com/maps/api/geocode/json?language=ja&'
const API_KEY = "<YOUR_API_KEY>"
var latlon = app.displayDialog("緯度,経度を入力", {defaultAnswer: ""}).textReturned
var URL = baseURL + 'latlng=' + latlon + '&key=' + API_KEY + '"'
var ans = app.doShellScript('curl -s ' + URL)
var jsonData = JSON.parse(ans)
var adrs = ''
if (jsonData['status'] != 'OK') app.displayDialog("データを取得できませんでした。")
else {
    var adrs = jsonData['results'][0]['formatted_address']
	
	app.displayDialog(latlon + 'の住所\r' + adrs + '\nをクリップボードにコピーします。')
	app.setTheClipboardTo(adrs)
}

 <YOUR_API_KEY> のところは、Google から取得した API-Key に書き換えてご利用ください。

Yahoo! API

RevGeocodeYahoo.scpt
// 緯度、軽度から住所を求める
// Yahoo! のジオコーダサービスを利用
// 戻り値は JSON 形式

var app = Application.currentApplication()
app.includeStandardAdditions = true

const baseURL = '"https://map.yahooapis.jp/geoapi/V1/reverseGeoCoder?output=json&'
const APP_ID = '<YOUR_APP_ID>'
var latlon = app.displayDialog("緯度,経度を入力", {defaultAnswer: ""}).textReturned
var lat = latlon.split(',')[0]
var lon = latlon.split(',')[1]
var URL = baseURL + 'lat=' + lat + '\&lon=' + lon + '&appid=' + APP_ID + '"'
var ans = app.doShellScript('curl -s ' + URL)
app.displayDialog(URL)
var jsonData = JSON.parse(ans)
var adrs = ''
if (jsonData['ResultInfo']['Count'] == 0 ) app.displayDialog("データを取得できませんでした。")
else {
	var adrs = jsonData['Feature'][0]['Property']['Address']
	  
	app.displayDialog(lat + ', ' + lon + 'の住所\r' + adrs + '\nをクリップボードにコピーします。')
	app.setTheClipboardTo(adrs)
}

<YOUR_APP_ID> のところは,Yahoo! で取得した自分の APP-ID に書き換えてご利用ください。

コメント歓迎

 お気づきの点や、誤りの指摘など歓迎します。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3