Help us understand the problem. What is going on with this article?

住所からGPS座標を、逆にGPS座標から住所を求める JXA(JavaScript for Automation)

概要

 住所から、そこの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 形式で提供されます。

ソース

 このソースは OS X の「スクリプトエディタ.app」の JavaScript で書いています。
これをスクリプトエディタで新規に JavaScript としてコピペして、ユーザーディレクトリ、ライブラリー、script フォルダーに保存しておくと、メニューバーのスクリプトアイコンから直接起動できて便利です。

住所やランドマークからGPS座標を求める JavaScript

adrs2gps_java.scpt
// 住所等から緯度、軽度を求める
// 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

gps2adrs_java.scpt
// 緯度、軽度から住所を求める
// 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)
}

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした