#author("2020-07-15T14:50:33+09:00","default:nobuoki","nobuoki") * OpenCage Geocoder で逆ジオコーディング [#u5900fd4] #author("2020-07-22T12:31:33+09:00","default:nobuoki","nobuoki") [[OpenCage Geocoder - Easy, Open, Worldwide, Affordable Geocoding>https://opencagedata.com/]] #ref(./cage01.png,50%) 誤解を恐れずに言うと、世の中のイケてるGeocoding APIをいい感じにラップしてくれるAPIです 無料で API Key を1つ発行してくれて、2,500 req/day, 1req/sec なのでそこそこ使えます #ref(./cage02.png,30%) ターミナルで簡単に呼び出すためにこんな関数を定義してみます #prism(bash){{{ # あらかじめ OpenCage にサインアップして API Key を取得し環境変数に入れておきます export CAPIKEY=<your-api-key> # 関数定義 rg_cage(){ lon=$1 lat=$2 CURL_OPT=${CURL_OPT:--s} # 任意の検索ワード: CQUERY exec curl "$CURL_OPT" \ "https://api.opencagedata.com/geocode/v1/json?key=${CAPIKEY}&pretty=1&q=${lat},${lon}${CQUERY}" } }}} 広島のとある場所 #prism(bash){{{ $ rg_cage 133.3843445777893 34.50165844222924 | jq .results[0].components { "ISO_3166-1_alpha-2": "JP", "ISO_3166-1_alpha-3": "JPN", "_category": "building", "_type": "building", "city": "Fukuyama", "continent": "Asia", "country": "Japan", "country_code": "jp", "neighbourhood": "今町", "postcode": "721-0973", "public_building": "農業・食品産業技術総合研究機構近畿中国四国農業研究センター本所", "road": "坪生福山線", "state": "Hiroshima Prefecture" } }}} 多言語対応だそうなので、同じものをロシア語で #prism(bash){{{ $ CQUERY='&language=ru' rg_cage 133.3843445777893 34.50165844222924 | jq .results[0].components { "ISO_3166-1_alpha-2": "JP", "ISO_3166-1_alpha-3": "JPN", "_category": "building", "_type": "building", "city": "Фукуяма", "continent": "Asia", "country": "Япония", "country_code": "jp", "neighbourhood": "今町", "postcode": "721-0973", "public_building": "農業・食品産業技術総合研究機構近畿中国四国農業研究センター本所", "road": "坪生福山線", "state": "Хиросима" } }}} 行政区域はロシア語化されてますね 海外ロケもやってみましょう ヒルトン ハワイアン ビレッジ ワイキキ ビーチ リゾート ラグーン タワー付近 #googlemaps3(lat=21.285, lng=-157.84, zoom=15) #googlemaps3_mark(lat=21.283228, lng=-157.8390395, nolist=1); ゔーハワイ行きたい・・・コロナ収まったら絶対行く! #prism(bash){{{ $ rg_cage -157.8390395 21.283228 | jq .results[0].formatted "Duke Paoa Kahanamoku Beach Park, Kalia Road, Honolulu, HI 96815-2830, United States of America" }}} 同じ場所をGoogle Geocodeで #prism(bash){{{ $ rg_google -157.8390395 21.283228 | jq '.results[] | .formatted_address' "18 Kahanamoku Street, Honolulu, HI 96815, USA" "198 Holomoana St, Honolulu, HI 96815, USA" "Lagoon Beach, Honolulu, HI 96815, USA" "Waikiki, Honolulu, HI 96815, USA" "Honolulu, HI 96815, USA" "Honolulu, HI, USA" "O‘ahu, Hawaii, USA" "Honolulu County, HI, USA" "Hawaii, USA" "United States" }}} 微妙に違いますが、どっちの住所でも実用上差し支えないように思います ちなみにgoogleはこんな関数にしてあります #prism(bash){{{ # あらかじめ Google API Key を取得し環境変数に入れておきます export GAPIKEY=<your-api-key> rg_google(){ lon=$1 lat=$2 CURL_OPT=${CURL_OPT:--s} # 任意の検索ワード: GQUERY curl "$CURL_OPT" "https://maps.googleapis.com/maps/api/geocode/json?key=${GAPIKEY}&latlng=${lat},${lon}${GQUERY}" } }}}