概要
住所から、そこのGPS座標(ジオタグ)を提供するWebサービスと、逆にGPS座標から住所名を提供するサービスがありますね。
Google Maps の API などがありますが、無償で利用できるものとして、次の2つを選択しました。
住所やランドマーク名をGPS座標に変換するサービス
Geocoding.jp
住所だけでなく、ランドマーク名で、GPS座標が XML 形式で提供されます。
GPS座標から住所を求める
農研機構の簡易逆ジオコーディングサービス
(従来の「https://www.finds.jp/」 は、2020年4月1日から完全に https://aginfo.cgk.affrc.go.jp/index.html.ja に移行するとのことですが、既にこのURLが使えるようになっています。)
GPS座標を渡すと、住所が JSON 形式で提供されます。
【追記 2023/4/17】 上記のサイトは閉鎖されました。
このため、Google Maps と Yahoo! を使う方法を別記事 に記載しました。
ソース
このソースは OS X の「スクリプトエディタ.app」の JavaScript で書いています。
これをスクリプトエディタで新規に JavaScript としてコピペして、ユーザーディレクトリ、ライブラリー、script フォルダーに保存しておくと、メニューバーのスクリプトアイコンから直接起動できて便利です。
住所やランドマークからGPS座標を求める JavaScript
// 住所等から緯度、軽度を求める
// https://www.geocoding.jp/ のサービスを利用
// 戻り値は XML 形式
var app = Application.currentApplication()
app.includeStandardAdditions = true
var baseURL = 'https://www.geocoding.jp/api/?q='
var adr = app.displayDialog("住所またはランドマーク名を入力", {defaultAnswer: ""}).textReturned
var ascAdr = encodeURIComponent(adr)
var URL = baseURL + ascAdr
var ans = app.doShellScript('curl -s ' + URL)
if (ans.indexOf('error') > 0) {
app.displayDialog('該当する住所が見つかりませんでした。')
} else {
var jyuusho = ans.split('<address>')[1].split('</address>')[0]
var ido = ans.split('<lat>')[1].split('</lat>')[0]
var keido = ans.split('<lng>')[1].split('</lng>')[0]
app.displayDialog(jyuusho + 'の緯度,経度は\r' + ido + ', ' + keido + ' です。\r緯度,経度をクリップボードにコピーします。')
app.setTheClipboardTo(ido + ',' + keido)
}
GPS座標から住所を求める JavaScript
// 緯度、軽度から住所を求める
// https://www.finds.jp/ → https://aginfo.cgk.affrc.go.jp/ws/rgeocode.php のサービスを利用
// 2020/4/1 以降は「https://aginfo.cgk.affrc.go.jp/ws/rgeocode.php」に完全移行
// 戻り値は JSON 形式
var app = Application.currentApplication()
app.includeStandardAdditions = true
var baseURL = '"https://aginfo.cgk.affrc.go.jp/ws/rgeocode.php?json\&'
var latlon = app.displayDialog("緯度,経度を入力", {defaultAnswer: ""}).textReturned
var lat = latlon.split(',')[0]
var lon = latlon.split(',')[1]
var URL = baseURL + 'lat=' + lat + '\&lon=' + lon + '"'
var ans = app.doShellScript('curl -s ' + URL)
var jsonData = JSON.parse(ans)
var adrs = ''
switch (jsonData['status']) {
case 400: app.displayDialog("データを取得できませんでした。"); break;
case 200:
case 202:
var pname = jsonData['result']['prefecture']['pname']
if (pname !== undefined) adrs = adrs + pname
var mname = jsonData['result']['municipality']['mname']
if (mname !== undefined) adrs = adrs + mname
try {var locals = jsonData['result']['local'] }
catch(e) {}
if (locals !== undefined) {
for (local in locals) {
var adrs = adrs + locals[local]['section']
var adrs = adrs + locals[local]['homenumber']
}
}
try {var azas = jsonData['result']['aza']}
catch(e) {}
if (azas !== undefined) {
for (aza in azas) {
adrs = adrs + azas[aza]['name']
}
}
app.displayDialog(lat + ', ' + lon + 'の住所\r' + adrs + '\nをクリップボードにコピーします。')
app.setTheClipboardTo(adrs)
}
【追記 2023/4/17】 [農研機構の簡易逆ジオコーディングサービス]のサイトは閉鎖されました。
このため、Google Maps と Yahoo! を使う方法を別記事:(https://qiita.com/ynomura/items/8524e489c17b053f3c6d) に記載しましたので、そちらをご覧ください。