• ベストアンサー

C++でGPSから時刻が表示されない

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.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()だと、元の文字列破壊したかと思いますので、その辺りはよろしく処理してください。

nisinasuno
質問者

お礼

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

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

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

nisinasuno
質問者

お礼

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

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

ざっとしか見ていませんが…… >どこが悪いのかご指摘いただきたく思います。 ReadFile()の戻り値を確認していないようですが…… 読み込み失敗とか考慮していますか? 1バイト読み込む度に、その後のstrcmp()など実行していますが、 コストが掛かりすぎる。とは思いませんか? 1行読み込みしてから処理するようにした方がいいかと思いますが……。 TransGGA()でのGPGGA formatの解析処理が…正しくない様に見えます。 http://ssro.ee.uec.ac.jp/ssro/uchuu-tsuushin/gps/GPS-data-format.html 1行取得完了後に、それぞれのフィールドを分解して解析すべきかと。

nisinasuno
質問者

お礼

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

関連するQ&A