GPSロガーの軌跡をイメージに描画したい

解決


Delphi大好き改めRAD命  2011-12-28 23:23:55  No: 41395

前回はありがとうございました。
どうしても解らないことがありましたので、質問させていただきます。

GPSロガーから吸出した軌跡データを、
イメージに書き込むソフトを作っています。
が、イメージに書き込むと、描かれる軌跡が放射線状に広がって、
移動軌跡になっていません。

データはフリーソフトウェアを使って吸い出したもので、
CSV形式です。

データは、

12636,2011/12/27,04:04:15.000,35.xxxxxx,N,139.xxxxxx,E,2.539 km/h,183.865952,

といった感じです。
使っているのは、35.xxxxxx,139.xxxxxxの二つだけです。
プログラムは、

procedure TForm1.Button2Click(Sender: TObject);
var
  i:integer;
begin
  i := 1;
  image1.Canvas.MoveTo(100,100);
  image1.Canvas.LineTo(100,100);
  while i < stringgrid1.RowCount do begin
    image1.Canvas.LineTo(
      100 + StrToInt(FloatToStr( StrToFloat(StringGrid1.Cells[3,i+1])*1000000 - StrToFloat(StringGrid1.Cells[3,i])*1000000))
    ,
      100 + StrToInt(FloatToStr( StrToFloat(StringGrid1.Cells[5,i+1])*1000000 - StrToFloat(StringGrid1.Cells[5,i])*1000000))
    );
    i := i +1;
  end;
end;

といった感じで、試し段階ですが、
これを行うと、上記のように、放射状に星型の線が描画されてしまい、
移動軌跡になりません。

多分、データの読み込み(解釈?)の仕方が間違っているのだと思います。

ググっては見たのですが、GoogleMAP等への描画はあるものの、白紙のイメージへの描画の参考になるものはヒットせず、困っております。

それではよろしくお願いしますm(__)m。


Delphi大好き改めRAD命  2011-12-28 23:27:56  No: 41396

環境書き忘れました。
Vista、Delphi3です。


Nov  2011-12-29 02:07:03  No: 41397

計算値が直前座標からの相対値になってます。
たとえば基準値をi=0(x=100, y=100)とするなら、

x := 100+StrToFloat(StringGrid1.Cells[3,i])*1000000 - StrToFloat(StringGrid1.Cells[3,0])*1000000));
y := 100+StrToFloat(StringGrid1.Cells[5,i])*1000000 - StrToFloat(StringGrid1.Cells[5,0])*1000000));

でどうでしょうか。


Nov  2011-12-29 02:09:20  No: 41398

か、かっこの数間違えた...


Delphi大好き改めRAD命  2011-12-29 03:46:06  No: 41399

Novさんありがとうございます、無事動作しました。

きちんと道程が出ました。
自分のケアレスミスというか、そもそものアルゴリズムが間違ってたんですね^^;

以下が解決したソースです。

それではありがとうございましたm(__)m。

procedure TForm1.Button2Click(Sender: TObject);
var
  i,x,y:integer;
begin
  i := 1;
  listbox1.Items.Clear;
  image1.Canvas.MoveTo(100,100);
  image1.Canvas.LineTo(100,100);
  while i < stringgrid1.RowCount do begin
    x := 100+StrToInt(FloatToStr(StrToFloat(StringGrid1.Cells[3,i])*1000000 - StrToFloat(StringGrid1.Cells[3,1])*1000000));
    y := 100+StrToInt(FloatToStr(StrToFloat(StringGrid1.Cells[5,i])*1000000 - StrToFloat(StringGrid1.Cells[5,1])*1000000));

    image1.Canvas.LineTo(x,y);
    i := i +1;
  end;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加