DATE : 2006/10/29 (Sun)
BREW API の IPOSDET_GetGPSInfo 関数を使用すると、AEEGPSInfo 構造体に経緯度などの位置情報を取り出すことができます。
しかし、AEEGPSInfo に格納されている経緯度は度単位であるにもかかわらず、整数値で格納されています。(浮動小数点数形式への変換は、WGS84_TO_DEGREES マクロ関数を使用します)
この整数は、BREW API のドキュメントによると緯度は 180/2^25 度、経度は360/2^26度として表されているようです。
ところで、この180/2^25や360/2^26という数字はどこから出てきたのでしょうか。API ドキュメントによると、『TIA/EIA IS-801規格に準拠』と書いてあります。この規格番号を基にウェブ検索してみると、『3GPP2 C.S0022-0 Position Determination Service Standard for Dual Mode Spread Spectrum Systems』(PDF)という規格書が見つかりました。
この文書を拾い読みしたところ、180/2^25度単位、360/2^26度単位とすることで、緯度は25ビット幅、経度は26ビット幅で表現できるそうです。
すると、経緯度の情報をデータとして格納しておきたい場合は、この規格の形式で格納しておくと便利です。あらかじめビット幅が分かっていますし、BREW で取得できる形式と互換性があるところも利点です。
( ´∀`)経緯度の演算をする際にも、整数のままで計算できますしね
ちなみに、経緯度を TIA/EIA IS-801 形式に変換するには、経緯度にそれぞれ186413 を乗じます。
(TIA/EIA IS-801形式) = (経緯度) × 186413
経緯度は度単位です。また、計算結果に小数があれば切り捨てます。
なお、「186413」という数字は、180/2^25 および 360/2^26 の逆数から小数を切り捨てたものです。
(注:規格書を全て読んだわけではないので、この部分が規格にあるかどうかはまだ確かめていません。ただ、BREW の GPS エミュレーションはこの式のように動作していました)
ちなみにこの形式の場合、TIA/EIA IS-801 形式の1は1.93×10^-2秒に相当します。つまり、これ未満の経緯度は TIA/EIA IS-801 形式では表現できないことになります。日本付近の地表面では、経緯度の1秒はだいたい30m前後に相当するそうです。すると、約60cm 前後以下の距離は TIA/EIA IS-801 形式では表現できません。
ただ、携帯端末に搭載されている GPS 受信機の精度(受信機単独での測位で10m~30m前後、基準局からの補正で数m)を考えると、これでも十分だと言えます。