#!/usr/local/bin/perl # #なんでこうしないんだろう?、というようなところは、ただ単に #知らないからだけです。いい方法があれば教えてください。 # #trkdate.pl -- pot -> trk point name->date use Time::Local; require 'glc-sub.pl'; # #更新履歴 #2007/09/08 作成開始 #2007/09/24 日付分割・補完をこちらに追加 # #カシミール3Dのpotファイル専用 #書式は以下 #DAT=WGS84/WGS84/0.000/0.00000000/0/0/0 #ORD=POI/tex=/ido=034'41'24'5/kei=135'33'05'7/adr=1/alt=-5/col=12/pda=22-SEP-05/pti=21:44:54 #ORD=POI/tex=/ido=034'41'26'3/kei=135'33'05'4/adr=1/alt=+9/col=12/pda=22-SEP-05/pti=21:45:23 #ORD=POI/tex=/ido=034'41'25'8/kei=135'33'05'3/adr=2/alt=+9/col=12/pda=22-SEP-05/pti=21:47:20 #ORD=POI/tex=/ido=034'41'25'8/kei=135'33'05'3/adr=2/alt=+11/col=12/pda=22-SEP-05/pti=21:47:24 # 緯度 経度 軌跡番号 高度 表示色 日付 時刻 #日付・時刻はUTC #ORD=POI と tex= は固定にしておく #出力は.trkデータ #書式は以下 #H のところは日付を入れる #H SOFTWARE NAME & VERSION #I PCX5 2.09 # #H COORDINATE SYSTEM #U LAT LON DEG # #H R DATUM IDX DA DF DX DY DZ #M G WGS 84 121 +0.000000e+00 +0.000000e+00 +0.000000e+00 +0.000000e+00 +0.000000e+00 # #H 2005/9/22 # #H LATITUDE LONGITUDE DATE TIME ALT #T N34.6901389 E135.5515833 22-SEP-05 21:44:54 -5 #T N34.6906389 E135.5515000 22-SEP-05 21:45:23 9 # #H 2005/9/22 # #H LATITUDE LONGITUDE DATE TIME ALT #T N34.6905000 E135.5514722 22-SEP-05 21:47:20 9 #T N34.6905000 E135.5514722 22-SEP-05 21:47:24 11 ################################################# $PI = 3.14159265358979; #ヘッダー $head = <>; #print $head; print <<"HEAD"; H SOFTWARE NAME & VERSION I PCX5 2.09 H COORDINATE SYSTEM U LAT LON DEG H R DATUM IDX DA DF DX DY DZ M G WGS 84 121 +0.000000e+00 +0.000000e+00 +0.000000e+00 +0.000000e+00 +0.000000e+00 HEAD #1行目 $first = <>; chop $first; ($ido ,$kei ,$address0 ,$altitude ,$col ,$pda0 ,$pti0) = &get_variables($first); $lat0 = &dmspot2deg($ido); $long0 = &dmspot2deg($kei); $time0 = &pdapti2time($pda0 ,$pti0); @date0 = localtime($time0); $day0 = $date0[3]; #最初の行は必ず書く(ことにする) trk_head($time0); trk_write($lat0,$long0,$pda0,$pti0,$altitude); #2行目以降 while (<>){ chop ; ($ido ,$kei ,$address1 ,$altitude ,$col ,$pda1 ,$pti1) = &get_variables($_); $lat1 = &dmspot2deg($ido); $long1 = &dmspot2deg($kei); $time1 = &pdapti2time($pda1 ,$pti1); @date1 = localtime($time1); $day1 = $date1[3]; if (($day0 != $day1) && ($address0 == $address1)){ @date_ye = @date0; $date_ye[0] = 59; $date_ye[1] = 59; $date_ye[2] = 23; $time_ye = timelocal(@date_ye); #Sun Sep 22 07:59:14 2005 の形式を取り出す $gtime_ye= gmtime($time_ye); @gtime_ye = split /\s+/,$gtime_ye; $year_ye = substr (($gtime_ye[4] - 1900) , 1 ,2); $mon_ye = uc ( $gtime_ye[1]); $pda_ye = sprintf("%02d-%s-%02d",$gtime_ye[2],$mon_ye,$year_ye); $pti_ye =$gtime_ye[3]; if($time0 != $time_ye){ $lat_ye = $lat0 +($lat1 - $lat0 )*($time_ye - $time0)/($time1 - $time0); $long_ye = $long0+($long1 - $long0)*($time_ye - $time0)/($time1 - $time0); trk_write($lat_ye,$long_ye,$pda_ye,$pti_ye,$altitude); } @date_to = @date1; $date_to[0] = 00; $date_to[1] = 00; $date_to[2] = 00; $time_to = timelocal(@date_to); $gtime_to= gmtime($time_to); @gtime_to = split /\s+/,$gtime_to; $year_to = substr (($gtime_to[4] - 1900) , 1 ,2); $mon_to = uc ( $gtime_to[1]); $pda_to = sprintf("%02d-%s-%02d",$gtime_to[2],$mon_to,$year_to); $pti_to =$gtime_to[3]; trk_head($time_to); if($time1 != $time_to){ $lat_to = $lat0 +($lat1 - $lat0 )*($time_to - $time0)/($time1 - $time0); $long_to = $long0+($long1 - $long0)*($time_to - $time0)/($time1 - $time0); trk_write($lat_to,$long_to,$pda_to,$pti_to,$altitude); } } #1行書き出し if ($address0 != $address1){ trk_head($time1); } trk_write($lat1,$long1,$pda1,$pti1,$altitude); #データの移動(0←1) $address0 = $address1; $pda0 = $pda1; $pti0 = $pti1; $lat0 = $lat1; $long0 = $long1; $time0 = $time1; @date0 = @date1; $day0 = $day1; } exit;