位置情報を正確にトラッキングする技術 in iOS — (第1回)
位置情報のトラッキングはPokemon Go、Nike+、Uberなどアプリにとってのコア技術です。
iPhoneはiPhone3Gの頃からGPSを搭載しており、CoreLocationというフレームワークを使って位置情報を取得することができますが、Appleのドキュメント通りにCoreLocationを普通に使っただけでは上のような有名アプリのような正確さでユーザーの位置情報を取り続けることはできません。
弊社では、iPhone OS3.1の頃から位置情報を扱ったアプリを多数開発してきました。世界中に100万人以上のユーザーがいるランニングアプリや、ドライブ中の位置や速度を正確に測定するアプリを開発してくる中で位置情報トラッキングアルゴリズムをiOS、Androidそれぞれに向けて開発してきました。
Pokemon Goが出て再び位置情報テクノロジーに注目が集まる中、ここで一度ユーザーの位置情報を正確にトラッキングする技術に関して私が蓄積してきたものを整理してみなさんに紹介して行きたいと思います。
これから4回ほどのブログに分けてiOSの位置情報トラッキングに関してまとめて、その後また4回ほどのブログに分けてAndroidの位置情報トラッキングに関してまとめて行きます。(これらのブログは、ロケーション・Tech・ノートという名前のMedium Publicationに投稿して行きますのでこのリンクを見ると全部のブログが見えるようになります。
iOSのLocationに関連したテクノロジーにはいくつかの種類があります。
- Standard Location
- Beacon Ranging
- Visit Monitoring
- Significant Location Change Monitoring
Standard Locationは文字どおり最もスタンダードなユーザーの位置情報取得方法でGPSを使って必要な時に(正確には非同期ですが)位置を取得する方法です。
Beacon RangingはiBeaconを使った室内などの近距離でのユーザーの位置の取得方法です。
Visit Monitoringはユーザーがある特定の場所に滞在した時の滞在時間などの振る舞いの情報を取得する方法です。
Significant Location Change MonitoringはGeo FenceやRegion Monitoringなどとも呼ばれユーザーがある特定の位置(範囲)に入った時だけイベントドリブンで何かの処理を行う方法です。
今回の連載ではStravaやUber、Pockemon Goのようなアプリを作るのに必要な技術であるStandard Locationにフォーカスを当てた説明をします。
それでは次回から実際にサンプルアプリを作りながら位置情報取得の方法について詳しく説明して行きます。
参考リンク
Standard Locationに関わる技術を知るための公式のドキュメントを下にまとめました。次回からこれらのドキュメト内にあることも紹介しながら説明して行きます。
Location and Maps Programming Guide
こちらのドキュメントはiOSのLocation技術全般の説明(上のBeacon RangingやRegion Monitoringも入っています。)をしています。また各技術ごとにさらに深いドキュメントへのリンクも網羅しているためまずはじめに読むと良いドキュメントです。
このドキュメントの中で特にGetting the User’s LocationのセクションにGPSを使ったStandard Locationについて書かれています。
Core Location Framework
GPSを使ったユーザーの位置情報取得にはCoreLocationというフレームワークを使いますが、実装中こちらのドキュメント、特にCLLocationManagerクラスについてはなんども参照することになると思います。
Displaying Maps
これは位置情報トラッキング技術とは直接関係ないですが、位置情報をトラッキングするアプリのほとんどがMapを搭載していること、またMapを搭載しない場合でもデバッグや精度の検証のため必ずデバッグ目的でMapを開発段階で表示させることが多いため、今回の連載でも第4回でMapの表示について詳しく説明します。