iPhoneの逆ジオコーディングでPBRequesterErrorDomainエラー。何故?

iPhoneアプリで逆ジオコーディング(MKReverseGeocoder)を使っていると、大して逆ジオコーディングのリクエストを出していないにも関わらず、突然次のようなエラーが出て逆ジオコーディングができなくなる場合がある。

/SourceCache/ProtocolBuffer/ProtocolBuffer-26/Runtime/PBRequester.m:523 server returned error: 503
reverseGeocoder() ERROR! Error Domain=PBRequesterErrorDomain Code=6001 "Operation could not be completed. (PBRequesterErrorDomain error 6001.)"

この場合の他の状況。

・標準マップアプリでは逆ジオコーディング可能
・他の逆ジオコーディングを使うアプリでも逆ジオコーディング可能
・異なるiPhone上でまったく違う場所から試しても逆ジオコーディング不能
・1日程度経つと勝手に直る

ひょっとして、逆ジオコーディングリクエストが多すぎて拒否されているのだろうか?

調べてみると、まったく同様の症状で困っている人達が多くいるようだ。
PBRequesterErrorDomain errors with reverse geocoding - iPhone Dev SDK Forum

AppleのiPhone Dev Forumにも同様の報告がある。PSTやESTの夜に起きるらしい。ということは、日本時間では朝から昼頃だ。今回エラーが出た時間帯とも確かに重なる。
Developer Forums: MKReverseGeocoder returning 6001 Error all of a sudden

ドキュメントによると・・・
MKReverseGeocoder Class Reference

・・・Each Map Kit application has a limited amount of reverse geocoding capacity・・・you should not send more than one reverse-geocode request per minute.・・・

確かに制限はあるようだ。1分に一回以上はリクエストすべきでないとも。しかし具体的な上限リクエスト数は書いていない。

こうなったら、ここの人々が言うように、GoogleのHTTPジオコーダーをFailoverとして使うしかないだろうか・・・
PBRequesterErrorDomain errors with reverse geocoding - iPhone Dev SDK Forum
The Google Geocoding Web Service - Google Maps API Web Services - Google Code

この場合に気になるリクエスト数上限だが、
よくある質問 - Google Maps API - Google Code

・・・1つのIPアドレスから24時間以内に受信するジオコードリクエストが15,000以上の場合、または1つのIPアドレスから送信されるジオコードリクエストの頻度が多すぎる場合、Google Maps APIジオコーダはステータスコード620で応答を開始します・・・

ふむ。これなら大丈夫そうだけど。ただ、こうも書いてある。

・・・ジオコーダを Google Maps API で表示する位置情報の取得以外の目的で使用することは利用規約違反になります・・・

ジオコーダーを使うなら「地図」を表示する必要があるというわけだ。そもそも前提として次のような条件がある。

・・・すべての商用利用が許可されているわけではありません。次の基準のいずれかに一致する場合は Google Maps API Premier を使用しなければなりません。・・・有料会員しかサイトを利用できない・・・会社内またはイントラネット内でしかサイトにアクセスできない・・・

無料アプリなら、地図を表示していれば使用可能だと思うけど。有料アプリの場合はPremierの方を使う必要がありそうだ。

いやいや、そもそもMKReverseGeocoderがちゃんと動作してくれればいいわけで・・・頼む!と。

コメント

このブログの人気の投稿

レオナルド・ダ・ビンチはなぜノートを「鏡文字」で書いたのか?

macでsmb(samba)共有サーバーに別名で接続(別アカウント名で接続)する方法

Google DriveにCURLでアップロードするには?