プロが教える店舗&オフィスのセキュリティ対策術

VisualStudio2010のC++でGPSからGGAセンテンスを読み取り時刻と経度・緯度を表示するプログラムを書いています。しかし、正常にビルドされるものの、画面に正しく表示されません。以下にコードを記すのでどこが悪いのかご指摘いただきたく思います。コードの中身は下記のリンクにあるzipファイルからお願いします。
さらにgoogleマップへの表示方法もご教授いただきたく思います。
https://skydrive.live.com/redir?resid=9A0EE6F5F2 …

A 回答 (3件)

1行読み込めたら、解析処理に放り込む…って感じでしょうか。



BOOL TransGGA(unsigned char *Recv)
{
 BOOLl Result = FALSE;
 if(Recv && strncmp(Recv, "$GPGGA,", strlen("$GPGGA,")) == 0) {
  unsigned char SumCalc;
  unsigned char *SumPt;
  for(SumPt = Recv, SumCalc = *SumPt;*SumPt && *SumPt != (unsigned char)'*';SumPt++, SumCalc += *SumPt);
  if(*SumPt && SumCalc == (unsigned char)strtol(SumPt, NULL, 16)) {
   /* strtok()などで','で区切って解析。 */
   /* 正しく解析できたらResult = TRUE; */
  }
 }
 return Result;
}

とりあえず、こんなトコですかねぇ……。
動作は未確認。というかGPSのデータ送信してくれる機器無いですし。
# GPS内蔵機器はいくつかありますがWindowsにシリアル接続でデータ渡せないし。

先頭の特定文字があるかどうかを判定して、チェックサムの算出&判定してます。
その後の','で区切って…ってのはCSV解析とかでよく出てくる例ですから、
検索するとそれらしいモノは見つかるでしょう。
トークン区切りできたら、$GPGGA formatの仕様に沿って変換したりとか……。
# strtok()だと、元の文字列破壊したかと思いますので、その辺りはよろしく処理してください。
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまって申し訳ないです。提示していただいた方法で現在やっているところです。早々のご回答ありがとうございました。

お礼日時:2012/10/30 22:38

>ちなみにTransGGA()でのフォーマット解析処理はどのようにするとよいでしょうか?



まあ、いろいろな方法がありますが……
私なら、とりあえず1行読み込んでから、','で区切って、最初のフィールドが
"$GPGGA"か判定、その後は','で区切りながら各フィールドを取得していく……でしょうね。
まぁ先にchecksumの確認するかも知れませんけど。
# checksumの算出方法調べる必要はあるかも知れませんけどねぇ……。
# 行の先頭から'*'の位置までの合計(下位8Bit)…かな?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
色々試しているのですがなぜかうまくいかないんですよね・・・
なにか具体的なコードかなにかありますでしょうか?

お礼日時:2012/10/29 18:08

ざっとしか見ていませんが……



>どこが悪いのかご指摘いただきたく思います。

ReadFile()の戻り値を確認していないようですが……
読み込み失敗とか考慮していますか?

1バイト読み込む度に、その後のstrcmp()など実行していますが、
コストが掛かりすぎる。とは思いませんか?
1行読み込みしてから処理するようにした方がいいかと思いますが……。

TransGGA()でのGPGGA formatの解析処理が…正しくない様に見えます。
http://ssro.ee.uec.ac.jp/ssro/uchuu-tsuushin/gps …

1行取得完了後に、それぞれのフィールドを分解して解析すべきかと。
    • good
    • 0
この回答へのお礼

早速の回答ありがごうとざいます。初心者なもので読み込み失敗などはまったく考慮していないです・・・・
ちなみにTransGGA()でのフォーマット解析処理はどのようにするとよいでしょうか?

お礼日時:2012/10/29 16:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!