#!perl -w
#
# カード形式ファイルにをGPSy拡張形式ファイルに
# Nowral
# 01/3/16
#
$0 =~ /(.+:)/;
$cwd = $1;
$trn = 0;
$rtn = 0;
$nr = 0;
undef @wrs;
undef @rrs;
undef @trs;
# ファイルループ
foreach $oldargv (@ARGV) {
$oldargv =~ /(.+:)(.+)/;
print "$2\n";
open(IN, $oldargv) || next;
$_ = <IN>;
chomp;
# トラック読み込み
if(/^16$/) {
$trn++;
while (<IN>) {
tr/\n\r//d;
my(@ed) = split(",");
next unless $#ed==1;
push( @trs, join("\t",
("T", $trn, " ", "", "-",
°2gdms($ed[0]/3600/256), °2gdms($ed[1]/3600/256),
"-", " 0.0", "DMS", "Tokyo", "0", "0.00")
) );
}
}
# ルート読み込み
elsif(/^144$/) {
push( @rrs, join("\t", ("R", $rtn, sprintf("MFRT%02d", $rtn))) );
while (<IN>) {
tr/\n\r//d;
my(@ed) = split(",");
next unless $#ed==4;
++$nr;
push( @rrs, join("\t",
("wx", $rtn, sprintf("MF%04d", $nr), "", "-",
°2gdms($ed[3]/3600/256), °2gdms($ed[4]/3600/256),
"-", " 0.0", "DMS", "Tokyo", "15/1", "0.00")
) );
}
$rtn++;
}
# スポット読み込み
elsif(/^8224$/) {
while (<IN>) {
tr/\n\r//d;
my(@ed) = split(",");
next unless $#ed==4;
$ed[4] =~ /^\"([\-0-9A-Z]{0,6}).*\"\s*$/;
push( @wrs, join("\t",
("Wx", "0", $1, "", "-",
°2gdms($ed[2]/3600/256), °2gdms($ed[3]/3600/256),
"-", " 0.0", "DMS", "Tokyo", "1/0", "0.00")
) );
}
}
# 1ファイル終了
close(IN);
print " ... done\n";
}
print "\n";
# ウェイポイント出力
printf "# ウェイポイント数 :%5d\n", $#wrs+1;;
if(@wrs) {
$newargv = $cwd . "GPS Waypoint Data";
open(OUT, ">$newargv") || die;
MacPerl::SetFileInfo('GPSy', 'TEXT', $newargv);
print OUT "GPSy3 Waypoint (version 3.38r3)\tNUMBER\tNAME\tCOMMENT",
"\tDATE\tLAT/NORTHING\tLON/EASTING\tZONE\tALT\tCOORD\tDATUM\tICON\tPROX\n";
printf OUT "#\tRecords:\t%d\n", $#wrs+1;
print OUT join("\n", @wrs), "\n";
close(OUT);
}
# ルート出力
printf "# ルート数 :%5d\n", $#rrs+1-$rtn;
if(@rrs) {
$newargv = $cwd . "GPS Route Data";
open(OUT, ">$newargv") || die;
MacPerl::SetFileInfo('GPSy', 'TEXT', $newargv);
print OUT "GPSy3 Route (version 3.38r3)\tNUMBER\tNAME\tCOMMENT",
"\tDATE\tLAT/NORTHING\tLON/EASTING\tZONE\tALT\tCOORD\tDATUM\tICON\tPROX\n";
printf OUT "#\tRecords:\t%d\n", $#rrs+1-$rtn;
print OUT join("\n", @rrs), "\n";
close(OUT);
}
# トラック出力
printf "# トラック数 :%5d\n", $#trs+1;
if(@trs) {
$newargv = $cwd . "GPS Track Data";
open(OUT, ">$newargv") || die;
MacPerl::SetFileInfo('GPSy', 'TEXT', $newargv);
print OUT "GPSy3 Track (version 3.38r3)\tNUMBER\tNAME\tCOMMENT",
"\tDATE\tLAT/NORTHING\tLON/EASTING\tZONE\tALT\tCOORD\tDATUM\tICON\tPROX\n";
printf OUT "#\tRecords:\t%d\n", $#trs+1;
print OUT join("\n", @trs), "\n";
close(OUT);
}
MacPerl::Quit(2);
die "The Unhappy End";
sub deg2gdms { # GPSy format of position
my($d) = @_;
my($sgn, $m, $s, $sf);
$d -=360 if $d>180; # longitude
if($d<0) {
$sgn = "-";
$d *= -1;
}
else{ $sgn = ""; }
$sf = int($d*36000 + 0.5);
$s = int($sf/10) % 60;
$m = int($sf/600) % 60;
$d = int($sf/36000);
$sf %= 10;
sprintf("%s%d。%02d\'%02d\.%d\"", $sgn, $d, $m, $s, $sf);
}