ホーム > デベロッパ > BREW プログラミング入門 > BREW で GPS > - 2 / 2 -

BREW で GPS - 2 / 2 -

SophiaFramework によるアプリ

SophiaFramework を使ったアプリでは、緯度と経度を設定して、現在地から目的地までの距離を近似計算する機能を追加します。

初期画面
最初の画面です。
現在地の位置情報
GPS ボタンが押されると、現在地のテキストボックスに位置情報を表示します。
目的地の設定
目的地の緯度・経度が設定され、Calc ボタンが押される。
目的地までの距離
目的地までの距離を表示します。

浮動小数点演算と数学関数

BREW では浮動小数点演算は可能ですが、加減乗除すべての演算について関数呼び出しで書く必要があります。たとえば、乗算は a * b ではなく、FMUL(a, b) です。

SophiaFramework なら、サンプルコードのように、浮動小数点演算や ANSI の数学関数が普通に記述できます。

// ボタンが押されたときの処理
HANDLER_IMPLEMENT_VOIDCONTROL(MyWindow, OnCalcButtonControl, result, control)
{
    unused(control);
    unused(result);

    Float64 lat(SFXHelper::wstrtofloat(_gpsLat->GetText().GetCString()));
    Float64 lon(SFXHelper::wstrtofloat(_gpsLon->GetText().GetCString()));
    Float64 destlat(SFXHelper::wstrtofloat(_destLat->GetText().GetCString()));
    Float64 destlon(SFXHelper::wstrtofloat(_destLon->GetText().GetCString()));
    Float64 dlatrad((lat - destlat) * PI / 180);
    Float64 dlonrad((lon - destlon) * PI / 180);
    Float64 dx(6378137 * dlonrad * cos(dlatrad));
    Float64 dy(6378137 * dlatrad);
    Float64 distance(sqrt(dx * dx + dy * dy));
    AECHAR distancewchar[64];

    SFXHelper::floattowstr(distance, distancewchar, 64);
    _distance->SetTitle(SFXWideString(distancewchar).Trim());
    return;
}

※ GPS情報を取得する IPOSDET_GetGPSInfo() は、
エミュレータを終了する際にメモリアクセス違反のエラーが発生する不具合があります。
携帯端末上では、エラーは発生しません。

 BREW 既知の問題点及びプログラミングTips