日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
ラジコン
2024年3月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

GPSログの手動checksum再計算

カテゴリー: General
2012-05-05 23:00
GPSログの手動checksum再計算

執筆:2012.05.05


通常のchecksumは、全部の合計ですが計算方法が違います。
$と*の間の文字を順番にxor演算します。

修正したいポイントの緯度経度は、
google earthでカーソル位置の情報をリアルタイムで知ることができるのでそれを参考にすると簡単です。

GPSログの緯度経度を手動で修正した場合の再計算などに使うと便利です。
機器にGPSログの修正機能が付属していない場合に
  ちょっとここ微妙に違う!!
   このわずかな ずれが気になる!!
 というようなときに活躍します。

コード(Pascal言語)

// GPSのログの行を手動変更した場合のchecksumの再計算など
function GPS_NMEA_Line_Checksum(s : string) : integer;
  var
   i , sum : integer;
begin
  // $data*<CR><LF>
  // $と*の間の文字をxorします
  // Todo : 1文字目が $以外は例外生成
  sum := 0;
  s := Trim(s);
  for i := 1 to Length(s) do
   begin
     if (i = 1) and (s[1] = '$') then continue;
     if (s[i] = '*') then break;
      sum := sum xor  Byte(s[i]);
   end;
   Result := sum;
end;

procedure TForm1.Button_RecalcClick(Sender: TObject);
begin
  Edit2.text := Format('%.2x' , [ GPS_NMEA_Line_Checksum(Edit1.text)]);
end;

procedure TForm1.Button_ClearClick(Sender: TObject);
begin
  Edit1.text := '';
end;


C/C++言語の場合は、 xor は ^ です。
for ( i = 0; i < strlen(s); i++ )
 {
     if ( (i == 0) && (s[0] == '$') )
        { continue; }
     if (s[i] == '*')
        { break; }
      sum = sum ^ s[i];
  }

GPSの各行の仕様は、
  GPS NMEA フォーマット
  GPS NMEA 仕様
などで検索すると知ることができます。

finepixだと 1ポイントは、4行が1セットです。
$GPGGA,・・・
$GPGSA,・・・
$GPRMC,・・・
$GPVTG,・・・




Amazon search for: GPS

 関連記事はありません。

ブログ内 関連記事: GPSログの手動checksum再計算

 関連記事はありません。

ブログ内 関連記事: GPSログの手動checksum再計算

 関連記事はありません。

Amazon search for: GPS

 関連記事はありません。
トラックバック
トラックバックはありません。
PR

[PR]