A-GPS
この記事は、最終更新日よりおよそ 9 年 5 ヶ月経過しています。 公式サイトなどで最新情報を確認してください。(最終更新:2015年2月) |
A-GPS (Assisted GPS) の概要と、Android端末で使えない場合(MVNO SIM使用中のNTTドコモ端末など)の設定方法など。
Assisted GPS
まっさらな状態からのGPS測位には、良好な状態で、必要な衛星電波(Almanac, Ephemeris の両方)の受信に数分~12.5分かかる。(参考:GPSと測位)
この一部、例えば Almanac データを衛星の代わりにネットワークから受信すると、最初の測位にかかる時間を30秒程度(測位に必要なだけの Ephemeris データの受信にかかる時間)にまで短縮できる(それ以上短縮するには基地局情報や「Google位置情報サービス」を使う必要がある)。
このように、通信等で必要なデータを補う手法を A-GPS (Assisted GPS) と呼ぶ。
ネットワークアシスト
A-GPS用のデータを自社製品・サービス向けにインターネット上で提供している会社(Google, Sony Ericsson, Nokia など)と、自社網のみで提供している会社(NTTドコモなど)がある。
後者では基地局情報などを使うことで、より使い勝手の良いデータが提供されている場合もある。また、この場合は OMA で規定されている SUPL (Secure User Plane Location) が使われる。
Android端末での利用
例えばNTTドコモでは独自に基地局情報を含む補足情報を提供しているが、同社のA-GPSサーバ (dcm-supl.com) へは SPモード(かiモード)からでないと接続できないため、SPモードを利用できない/していない場合は使えない。しかも、同社が販売する端末は dcm-supl.com へ接続する設定になっているため、SPモード以外で使う場合(MVNOを含む)は /etc/gps.conf を書き換える(後述、要root権限)などしないと、A-GPSが使えなくなる。
一方、Sony Ericsson社製でNTTドコモ向け以外の端末では、同社が運営するA-GPSサーバが使えるよう設定されている。 例えば EMOBILE S51SE では supl.sonyericsson.com が設定されていた。 同社の端末を使っていて、カスタムROMを焼く場合は、予め公式ROMの /etc/gps.conf の設定内容を控えておくと良い。
この他、Google社が提供するA-GPSサーバを使うこともできる。(SBM などA-GPSを提供していないキャリアの端末では予め設定されているらしい。)
root権限がない場合は /etc/gps.conf の書き換えは出来ないが、"AngryGPS" を探すと幸せになれるという噂も(筆者は使ったことないが)。
Google の A-GPS サーバを使う
/etc/gps.conf を下記のように書き換える(要root権限)。
日本以外で使う端末は、NTPサーバは近くの安定稼働しているサーバを探して書き換えると良い。
NTP_SERVER=ntp.nict.jp XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin SUPL_HOST=supl.google.com SUPL_PORT=7276
ちなみに、supl.google.com:7275 はSSL必須、supl.google.com:7276 はSSL無し、のよう。
カスタムROMを焼いている場合、CyanogenMod ではおそらく既に supl.google.com が使えるようになっている。
アプリで対応する方法
とある GpsLocationProvider の969行以降に、
// Set the SUPL server address if we have not yet if (mSetSuplServer) { try { InetAddress inetAddress = InetAddress.getByName(mSuplHost); if (inetAddress != null) { byte[] addrBytes = inetAddress.getAddress(); long addr = 0; for (int i = 0; i < addrBytes.length; i++) { int temp = addrBytes[i]; // signed -> unsigned if (temp < 0) temp = 256 + temp; addr = addr * 256 + temp; } // use MS-Based position mode if SUPL support is enabled mPositionMode = GPS_POSITION_MODE_MS_BASED; native_set_supl_server((int)addr, mSuplPort); mSetSuplServer = false; }
こんなくだりがあり、この関数を呼ぶという話があった。
ただし、Android 2.2 以降のRelease用ソースコードには native_set_supl_server が含まれておらず、似たような名前の native_set_agps_server が含まれている。こちらに名前が変わったのだろう。
実際これで対応されているかは分からないんだけれど、APNタイプにsuplを指定していない端末で山旅ロガーを動かしたら右図のエラーが出てきたので、この類の処理を内部でしているのかなと思われた。
アプリによっては、こういった処理を内蔵してsuplを設定してくれる物もあるようなので、とりわけ MVNO SIM を使う場合は、APNタイプに supl を追加しておくと良さそう。
MVNOとGPSについて
IIJmio meeting #5 で報告があったらしい。プレゼン資料が公開されていた。
GPS測位の基礎知識は習得済みを前提にしているのと、それを踏まえても正直解りやすいとまでは言えないが、MVNOでGPSを使いたいという向きには格好の参考資料になると思う。またGPSチップメーカー独自実装まで言及している資料は少ないと思う(チップメーカーのホームページ等を探せば出てくるが)ので、参考になるのではと。
NTTドコモとそのMVNO
NTT DOCOMO テクニカル・ジャーナル VOL.17 NO.2「国際ローミングSUPLによるFOMA位置情報機能の開発 ―現在地確認機能―」の2ページ目にある図が分かりやすかった(ただし今回は海外事業者ネットワークという所もドコモネットワークになる)ので下に引用しているが、NTTドコモ網では網内に位置情報サーバを持っており、中継パケット交換機(GGSN)でSUPL通信が振り分けられているようだ(通常のデータ通信はISPで振り分けられる)。
上図はW-CDMA(3G)のもの。C-plane (Control plane) を使うのは従来のi-mode端末。いわゆるスマートフォンでは U-plane (User plane) を使う。ただしLTEで追加された #LTE Positioning では C-plane も使われる。
MVNOにもいろいろあるが、最近流行りのレイヤー2接続のMVNO(※)はGGSNを自前で運用している(から細かい通信量制御ができる)。つまり、GGSNに辿り着いた時点でドコモ網を出ているので、ドコモのSUPLサーバを使うよう設定されている端末では、同じドコモ網を使っていたとしても、(ドコモがSUPLサーバをインターネット側に公開するでもない限り)ドコモのSUPLサーバには接続できないと考えられる。
(これは、レイヤー3接続のMVNOなら接続できるという意味ではない。dcm-supl.com の名前解決ができるかどうかに加え、仮にできたとしてもドコモのGGSNの設定次第に思える。)
※日本通信、フリービット、IIJ、OCN、BIGLOBE、So-net など。(日経コミュニケーション 2014年5月号)
LTE Positioning
情報不足で(もとい、勉強不足で)よくわかっていないが、 3GPP Specifications Release 9 から位置情報サービスが追加されているらしい。 そこで使われる専用プロトコルが LTE Positioning Profile (LPP)。
参考
- Positioning with LTE (英語) - Ericsson の whitepaper らしい。本物かは知らんが:-)。
- An Overview of LTE Positioning (Spirent)(英語) - 技術解説書。要登録だが無料でダウンロードできる。
- LTEのさらなる発展 ―LTE Release9― (NTTドコモ)
関連記事
(準備中)