耳ナビで現在地住所を音声合成で伝えるウィジェットを発見--動作がちょっと不安定だけど・・・【追記】やはり不安定で却下 - jeyseni's diary (2023/11/25)。1年ぶりにMacrodroidを動かしてみた。マップを表示して指定個所をクリックして現在地の住所を音声合成で伝える,という実験を繰り返していたのだが,結局,画面にマップが表示されていない状態では動作させられないので,ずっと画面が点いたままになるという不具合があり,制作をあきらめていた。
スマホを交換してから,自動的にMacrodroidも移行していたことは確認していたのだが,「結局ここまでか」と思ってそのまま放置していた。
Macrodroidのデフォルトの機能として,GPSで読み取った現在地の緯度経度は変数に取り込むことができたり,直接読み上げることができることは,以前から確認していた。ところが何かのサイトで,緯度経度を住所に変換するAPIがあることを知った。
住所やマップ上をクリックして,その場所の緯度経度を抽出することを「ジオコーディング」といい,逆に緯度経度から住所を知ることを「逆ジオコーディング」と呼ぶのだそうである。この機能を使って,外部の逆ジオコーディングサイトでデータ変換し,これをMacrodroidで音声合成するという方法にチャレンジした。
逆ジオコーディングAPIの典型は,google mapにあった。ただ,google APIの「API_KEY」を取得する必要がある。以前,google calendarの情報を自動で書き換える方法を試したときもこのAPI_KEY申請をした記憶があるのだが,何だか面倒だった。同様に,Yahoo mapの逆ジオコーディングでもYahoo アプリケーションIDを取得する必要がある。ちょっと面倒な感じがした。
国土地理院や国土交通省のマップでもこの逆ジオコーディングに対応している。ほかにないか見たところ,Open Street Map(OSM)の逆ジオコーディング「OpenStreetMap Nominatim API」を見つけた。どういう結果になるのか興味があったので,試してみることにした。
しかしMacrodroidでこの逆ジオコーディングをどう実現できるのかが,まったく不明だった。そこで,投稿されているマクロで「GPS」で検索したところ,この逆ジオコーティングに対応していると思われるマクロ「コーディネートから住所を取得��を見つけた。このマクロはgoogle map APIを使う仕組みになっており,上記の理由で筆者は動かすことができなかった。さすがに投稿するだけに,エラー処理も完璧のようだったが,「アクション」と呼ばれる動作が数十行にわたってセットされており,理解できないまま数日放置した。
気を取り直して,エラー処理や分岐などをどんどん消していくと,google map APIにHTTP Get命令を送って住所情報を得て,その後その住所情報から都市名,通り名などを抽出して表示する,という流れが見えてきた。
HTTP Getの先にOSMのサイト情報と緯度経度を入れて送り,回答をXMLで得る。ここから,文字処理で都市名などを抽出するということが分かった。
ここからは数日間,うなりながら試行錯誤を繰り返した結果,都市名,区分名(町名),通り名,登録ビル名,に絞って情報を抽出し,これを音声合成で読み上げることに成功した。
MacrodroidのマクロをONにし,1分ごとに現在地を読み上げるようにした。画面をOFFにしていてもGPSで情報が取れていれば,住所の読み上げができる。
しかも,以前は国名,郵便番号から読み上げていたのだが,その2点は読まないようにセットできたので,非常に聞き取りやすくなった。
途中のエラー処理をすべて外してしまったので,いろいろと不具合は起きる可能性はあるのだが,いちおうこれが目標としたアプリでもある。クルマの運転中にも,音声再生させることを考えているところである。