#!/usr/bin/perl -w
#
# GPSy拡張形式のウェイポイントをユーザメモデータに
# Nowral
# 01/3/22
#
$cd = 0x10000; # depth / color
# 出力ファイル準備
$0 =~ /^(.*:)/;
$newargv = $1 . "UserMemo.memo";
open(OUT, ">$newargv");
MacPerl::SetFileInfo('NMVU', 'TEXT', $newargv);
# ヘッダ出力
print OUT <<END_OF_HEADER;
;地図画像ビューア ユーザメモデータ
atr0= "GPS Waypoint Data" mark= 0
;
END_OF_HEADER
# データ読み込み
$oldargv = "";
$nw = 0;
$cid = -1;
while (<>) {
if ($ARGV ne $oldargv) {
$oldargv = $ARGV;
++$cid;
}
@ed = split("\t");
next unless($ed[0] eq "W" || $ed[0] eq "Wx" || $ed[0] eq "wx");
# ウェイポイント
$b = &gdms2deg($ed[5]);
$l = &gdms2deg($ed[6]);
print OUT "Name= ( \"", $ed[2],
"\" addr= ( ", °2vdms($b), " ", °2vdms($l),
" ) atr= 0 offset= ( 0 0 ) font= \"Osaka\" size= 14",
" face= ( normal ) color= ( ", &penprop($cid), " ) )",
" Memo= ( \"", $ed[3], "\" )\n";
++$nw;
}
close(OUT);
print "# ウェイポイントデータ数: $nw\n";
# ユーザデータユティリティ起動 > うまくいったらテキストファイル削除
if($nw) {
MacPerl::DoAppleScript(<<END_OF_SCRIPT) && unlink $newargv;
tell application "Finder" to open alias "$newargv"
END_OF_SCRIPT
}
print " ... done\n";
MacPerl::Quit(2);
die "The Unhappy End";
sub penprop { # 番号 -> 色
my($id) = @_;
my($cb, $cr, @cs);
$id *= 65;
$cb = int(($id+60) / 120);
$cr = ($id/120-$cb) * $cd;
$cs[$cb%3] = $cd - 1;
($cs[($cb+1)%3], $cs[($cb+2)%3]) = $cr>0 ? ($cr, 0) : (0, -$cr);
return sprintf("%d %d %d", @cs);
}
sub deg2vdms { # 経緯度、度 -> dd.mm.ss.s形式
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.%01d", $d, $m, $s, $sf);
}
sub gdms2deg { # 経緯度、GPSy形式 -> 度
my($d) = @_;
$d =~ /(-?)(\d*\.?\d*)。?(\d*\.?\d*)'?(\d*\.?\d*)"?/ || die;
return ($1 ? -1 : 1) * ($2 + $3/60 + $4/3600);
}