#!perl -w
#
# GPSy拡張形式のトラックログをMPSファイルに
# Nowral
# 01/3/10
#
$cd = 0x100; # depth / color

# 出力ファイル準備
$0 =~ /(.+:)/;
$newargv = "$1UserLine.mps";
open(OUT, ">$newargv");
MacPerl::SetFileInfo('pa4M', 'TEXT', $newargv);

# ヘッダ出力
print OUT <<END_OF_HEADER;
// MapServer Script : generated with 'NW-GPSy2MPS4'
mapserver script ver="1.0" savable="yes";
theme
  str="";
message
  str="";
group
  gid="0"
  textrgb="0,0,0"
  textstyle="frame#2"
  textsize="9"
  textoff="100000"
  pointstyle="mark#1000"
  iconsize="16";
END_OF_HEADER

# データ読み込み
undef @day;
undef @lat;
undef @lon;
undef @strts;
$oldargv = "";
$trn = "";
$n = 0;
$nw = 0;
while (<>) {
  @ed = split("\t");
  next unless($ed[0] eq "T" || $ed[0] eq "Wx" || $ed[0] eq "W");
  $ed[5] =~ /(-?)(\d*\.?\d*)。?(\d*\.?\d*)'?(\d*\.?\d*)"?/ || die; # 緯度
  $b2 = ($1 ? -1 : 1) * ($2 + $3/60 + $4/3600);
  $ed[6] =~ /(-?)(\d*\.?\d*)。?(\d*\.?\d*)'?(\d*\.?\d*)"?/ || die; # 経度
  $l2 = ($1 ? -1 : 1) * ($2 + $3/60 + $4/3600);

# トラック
  if($ed[0] eq "T") {
    if ($ARGV ne $oldargv || $ed[1] ne $trn) {
      push(@strts, $n);
      $oldargv = $ARGV;
      $trn = $ed[1];
    }
    $ed[4] =~ /(\d+)\/(\d+)\/(\d+)/;
    push(@day, $2+0); # 日付
    push(@lat, $b2); # 緯度
    push(@lon, $l2); # 経度
    ++$n;
  }
# ウェイポイント
  elsif($ed[0] eq "Wx" || $ed[0] eq "W") {
    print OUT "point\n\tgid=\"0\"\n\tpos=\"",
     &deg2dms($b2), ",", &deg2dms($l2), "\"\n";
    print OUT "\tstr=\"", $ed[2], "\";\n";
    ++$nw;
  }
}
push(@strts, $n) if $n;
print "# ウェイポイントデータ数: $nw\n";
print "# トラックデータ数: $n\n";

# グループループ
foreach $ig (1 .. $#strts) {
  $strt = $strts[$ig-1];
  $end  = $strts[$ig] - 1;
  $n = $end - $strt + 1; # 2未満の時の対応???
  printf "# データ数  : %d\n", $n+1;

# スタイル
  $lw = 3;
  $azm = $day[$strt] * 65;
  $cb = int(($azm+60) / 120);
  $cr = ($azm/120-$cb) * $cd;
  $cs[$cb%3] = $cd - 1;
  ($cs[($cb+1)%3], $cs[($cb+2)%3]) = $cr>0 ? ($cr, 0) : (0, -$cr);
  $clr = sprintf("%d,%d,%d", @cs);

# グループヘッダ
  print OUT <<END_OF_HEADER2;
group
  gid = "$ig"
  gname = ""
  textrgb = "$clr"
  textstyle = "plain"
  textsize = "12"
  textoff = "100000"
  linergb = "$clr"
  linestyle = "line#0"
  linewidth = "$lw";
END_OF_HEADER2

# 描画パス
  foreach $j ($strt .. $end-1) {
    print OUT "line\n\tgid=\"$ig\"\n\tpos=\"",
     &deg2dms($lat[$j]), ",", &deg2dms($lon[$j]), ",",
     &deg2dms($lat[$j+1]), ",", &deg2dms($lon[$j+1]), "\";\n";
  }

# 1グループ終了
}

# フッタ出力
print OUT <<END_OF_FOOTER;
disp all;
mapserver end;
END_OF_FOOTER
close(OUT);

MacPerl::Quit(2);
die "The Unhappy End";


sub deg2dms { # 経緯度、DD.DDDD形式 -> MPS形式
  my($d) = @_;
  my($m, $s, $sf);
  $sf = int($d*36000 + 0.5);
  $s = int($sf/10) % 60;
  $m = int($sf/600) % 60;
  $d = int($sf/36000);
  $sf %= 10;
  return sprintf("%d/%02d/%02d.%d", $d, $m, $s, $sf);
}