前回はありがとうございました。
どうしても解らないことがありましたので、質問させていただきます。
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。
環境書き忘れました。
Vista、Delphi3です。
計算値が直前座標からの相対値になってます。
たとえば基準値を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さんありがとうございます、無事動作しました。
きちんと道程が出ました。
自分のケアレスミスというか、そもそものアルゴリズムが間違ってたんですね^^;
以下が解決したソースです。
それではありがとうございました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;
ツイート | ![]() |