#!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=\"",
°2dms($b2), ",", °2dms($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=\"",
°2dms($lat[$j]), ",", °2dms($lon[$j]), ",",
°2dms($lat[$j+1]), ",", °2dms($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);
}