carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

逆ジオコーディング(住所の逆検索)

逆ジオコーディングではまる。

今まで、ずっと開発していて、GSPの位置情報から住所を取得するために逆ジオコーディングとして、Geocoder getFromLocation を利用しています。これが、住所取得でエラーとなるケースが多発し、1日経過するとまた利用が可能になる状況が続いていました。もうすこし詳しく見ると、メソッドを呼び出すと、IOExceptionが発生し、「Unable to parse response from server」となっています。


なんとなく、Googleの制限なんだろうな~と思いながら利用していたのですが、正式にリリースするためには解決しないといけないので、考えてみました。

Geocoder getFromLocationのAPI仕様がどこにあるのか分からないですが、ジオコーディングの説明を見ると多分、この呼び出しも2500件/日の可能性が高いです。(無料での利用制限)

今回、GPSで位置取得を10秒間隔とした場合、毎回APIを呼び出ししたとすると、1分間に6回呼び出しとなるので、1時間で360回となり、8640回/日となります。実際、プログラム的には、連続して同じ位置が取得される場合があるので、その場合には、前回値を利用していますので、そこまで多くなることはありませんが、許容量を超えそうです。

では、1分間に1回とすると、3600回/日となります。常時記録することは、アプリの性質上無いでしょうし、連続して同じ位置の可能性もあるので、その場合は検索しないようにすることで、2500回を下回ることができるでしょう。
とうことで、一度検索したら、その後1分間は検索できないようにすることにします。

■結論として、getFromLocationの利用でI/O Exceptionが発生する場合には、呼び出し回数を見直すことで回避できるかもしれません。同じ例外で困っているかたの参考になれば幸いです。

あと、これは、SQLiteで独自の保持機能(キャッシュ)を作れば、もう少し上手くできると思うので、時間を見て対応しようと思っています。