圏外でも、機内モードでも GPS は使えるのか
使えます。そしてその理由が分かると、スマホの位置表示をめぐる誤解のほとんどが解けます。スマホは問い合わせているのではなく、ただ聞いているだけです。通信が買っているのは、最初の測位までの速さと、背景に敷かれる地図のほうです。
まず結論から。使えます。電波が一本も立たない山の上でも、SIM が現地で何の役にも立たない国でも、機内モードを入れたままでも、スマホは自分がどこにいるかを割り出せます。条件は一つだけ、機内モードが位置情報サービスまで止めていないことです。そして iOS では止めません。
この誤解はほどいておく価値があります。圏外の場所で地図アプリを開いて、灰色の四角の上に青い点だけが浮かんでいるのを見た経験は、たぶん誰にでもあります。そして多くの人はそれを「測位が壊れた」と受け取ります。壊れていません。欠けていたのは地図のほうです。同じ画面に重ねて描かれているせいで一体のものに見えますが、この二つはまったく別の仕組みです。
スマホは「聞いている」だけで、「尋ねて」はいない
衛星測位の受信機は、文字どおり受信機です。およそ三十機の GNSS 衛星が、「こちらは十一番衛星、軌道はこれ、こちらの時計はいまこの時刻」という内容の信号を絶え間なく流し続けています。信号は宇宙から地上へ、一方向にしか流れません。スマホは何も送り返しませんし、どの衛星もあなたの存在を知りません。
受信機は、そのうち四機以上から届く信号のごくわずかな到達時間差から、四つの未知数を解きます。緯度、経度、高度、そして自分の安価な時計が原子時計からどれだけずれているか。仕掛けはこれだけです。必要なのは空がそこそこ開けていることだけで、SIM もデータ通信も Wi-Fi もアカウントも課金も要りません。
GNSS が地球上のどこでも無料で、しかも位置が「使い切られる」ことがないのも、同じ理由です。衛星は、誰が聞いていようといまいと、同じように電波を流し続けています。
では、モバイル通信は何をしているのか
二つあります。そしてそのどちらも、測位そのものではありません。
最初の測位が速くなる
受信機が衛星を手早く見つけるには、いまどの衛星がどのあたりにいるかをおおよそ知っていると助かります。その情報、つまりアルマナックとエフェメリスは衛星自身も流していますが、速度が遅く、電波から一から取得すると三十秒から数分かかることがあります。アシスト GNSS は、まったく同じ軌道情報をネットワーク経由で一瞬のうちにダウンロードする、それだけの仕組みです。どこを探せばいいかが最初から分かっている、というわけです。
アシストがなければコールドスタートになります。測位は届きます。ただ時間がかかるだけです。電波のない場所で実際に体感されるのはほぼこれで、歩き出す前に登山口で一分ほど立ち止まっておくとよい、と言われるのもこのためです。
背景に敷かれる地図
地図タイル、つまり道路も等高線も衛星写真も、サーバーから取ってくる画像です。測位とは何の関係もありません。通信がなければ、座標は手に入るのに、それを載せる背景がない。あの灰色の四角の正体はこれで、位置が欠けているのではなく絵が欠けているだけです。
電波がなくても、それでもうまくいかないこと
- コールドスタートに時間がかかること。上に書いたとおりです。開けた場所で一分ほど待ってから歩き出してください。
- 深い谷、密な樹林、トンネル、そして車内。いずれも信号を遮るか反射させます。これは携帯の電波とは無関係で、都心のど真ん中でも同じように起きます。ビル街を通った軌跡がときどき建物の中をさまようのは、これが理由です。
- Wi-Fi 測位。屋内で近くのネットワーク名から位置を割り出すあの仕組みは、データベースへの問い合わせを必要とします。オフラインの屋内では衛星だけが頼りになり、それはつまり、ほとんど何も頼れないということです。
- 地図は、あらかじめタイルを保存してあるアプリでなければ白いままです。
電波がまったくない場所で軌跡を記録する
記録アプリにとって本当に効いてくるのは、測位が届くかどうか(届きます)ではなく、届いた測位をアプリがどこへ置くかです。走行中はメモリに溜めておいて最後にまとめてアップロードする作りのアプリは、測位そのものが持っていない依存を、自分の手で通信に対して作ったことになります。過去の記録一覧をサーバーから読む作りなら、依存がもう一つ増えます。そして痛いのは後者のほうです。トンネルに入り、アプリを開き、自分の記録が消えたように見えるからです。
Roam(ローム)は、構造として逆の作りを選んでいます。測位点は届いたその瞬間に、そのライドの累計値と同じトランザクションで、端末内のデータベースへ書き込まれます。記録済みの一キロがメモリの上にしか存在しない時間帯が、そもそも存在しません。記録一覧の画面も同じローカルのデータベースを読んでいて、ほかに読みに行ける先を持っていません。リポジトリには、この画面まわりのコードを丸ごと走査して、通信系のシンボルが一つでも現れたらビルドを失敗させるゲートが入っています。以前のバージョンが実際に一覧をサーバーから読んでいて、いま書いたとおりの「トンネルの中で一覧が空になる」不具合を起こしたからです。
正直に言っておくべき例外が一つあります。地図の背景画像です。これはほかのどの地図とも同じように、タイルの配信元から取ってきます。通信がなくても走った線は描かれ、計測され、保存されますが、その後ろの街並みは出てこないかもしれません。欠けているのは世界の絵であって、あなたのライドではありません。
よくある質問
機内モードでも GPS は動きますか
動きます。機内モードが切るのは送信側、つまり携帯通信と、既定では Wi-Fi と Bluetooth です。GNSS の受信は受け身の動作なので、そのまま生きています。iOS では位置情報サービスは別のスイッチで、機内モードでは無効になりません。ただし最初の測位は遅くなります。アシスト GNSS が軌道情報を取りに行けないからです。地図タイルも出ません。
GPS はモバイルデータを消費しますか
測位そのものは一切消費しません。アシスト GNSS が最初の測位を速めるために数キロバイトの軌道情報を落とすことはありますし、地図タイルはかなりの通信量を使うことがあります。ただしそれは地図の話であって、測位の話ではありません。
電波がないと「位置情報を取得できません」と出るのはなぜですか
たいていはコールドスタートがまだ終わっていないか、空がまったく見えない場所にいるかのどちらかです。屋外に出て、立ち止まって、一分ほど待ってみてください。アプリの表示が「遅い」ではなく「空っぽ」になるなら、そのアプリは衛星ではなくサーバーを待っている可能性が高いです。
海外でローミング料金をかけずにハイキングを記録できますか
できます。機内モードにして、いつもどおり記録してください。測位には費用もかからず、通信も発生しません。影響を受けるのはタイルを取りに行く地図だけなので、出発前に必要なオフライン地図を用意しておくか、白い背景に線だけが引かれる状態を受け入れてください。
ライドを失わない記録アプリ
Roam は測位点が届いたその瞬間に、走行中の累計値と同じトランザクションで端末へ書き込みます。信号が切れた区間は直線でつながず、切れた区間として残します。獲得標高は GPS の高度ではなく気圧センサーから読みます。アカウントもサインインも同期もありません。一本まるごと記録して、見て、再生するところまでは無料です。