wigglin’ bloggin’: geek cyclist’s mubling

MKReverseGeocoderは使わない方がいいみたい

iPhoneプログラミングに関する話を書くのはもしかして初めてかな?

去年からMapKitの逆ジオコーダ(MKReverseGeocoder)の動作が不安定で悩んでいたのですが、どうやら実装上の問題ではなくGoogle側の問題らしい事が分かったのでシェアしておきます。

結論は、MKReverseGeocoderは使わずに、GoogleMapsのREST APIを直接使いなはれという事のようですね。

問題というのは、MKReverseGeocoderで逆ジオコードを試みると、かなり高い頻度で次のようなエラーが返されるという事です。

Error Domain=MKErrorDomain Code=4 “Operation could not be completed. (MKErrorDomain error 4.)”

良い時で1割くらい、悪いときは百発百中でこのエラーが発生します。

pinprickをリリースする時にも、この問題のために標高APIを採用したのでした。しかし、ALPSLAB apiが間もなくサービスを終了するというのと、国内しかサポートていないという問題があったので今回は腰を据えて調べてみました。

やはり同じ問題で悩まされている方が多いようで、iPhone Dev SDK Forumには推測を含めて様々な情報が寄せられていました。

PBRequesterErrorDomain errors with reverse geocoding – iPhone Dev SDK Forum

リクエスト数が多いからブロックされてるのでは?とか、時間帯によって応答が違うみたいとか、Droidがリリースされてから発生するようになったとか色々。いずれにしろ、MKReverseGeocoderがダメな子だって事は明らかなようです。

その中に、GoogleMapsのREST APIを使ったらうまくいったとの報告があったので、同じ事を試してみたらアッサリと解決したのでした。

ただ、返される住所が「県道○○号線」のよう表記になる事があり万能って訳でもないんですけどね。pinprickの場合はアプリの性質上、こういう住所表記が多発しそうな気がします。あと、標高APIのように位置情報に付随する標高は得られないので、ツイート本文から標高が消えてしまいますので悪しからず。

GeoWiseCameraでも同じ事をしているので、次のアップデートで同じ修正を入れないとなぁ。

この問題は、AppleとGoogleの関係がこじれてる事も影響してるのかなーという気がしなくもないですね。現象だけを見ると、Googleが意図的にiPhoneを標的にイジワルしてるように思えてなりません。

去年、AppleがPlaceBaseという地図サービス企業を買収したので、近いうちにGoogleMapsと決別するのでしょう。でもそれでサービスレベルが低下しないよう願いたいところです。

You can follow any responses to this entry through the RSS 2.0 feed.