1 |
#! /usr/bin/perl
|
2 |
|
3 |
open(FILE,"<$ARGV[0]");
|
4 |
read(FILE,$header,64);
|
5 |
|
6 |
($magic,$version)=unpack("a8l",$header);
|
7 |
|
8 |
#print "magic=$magic version=$version\n";
|
9 |
|
10 |
select STDOUT; $| = 1;
|
11 |
|
12 |
$count=$ARGV[1];
|
13 |
while ($count) {
|
14 |
read(FILE,$record,64);
|
15 |
$count--;
|
16 |
}
|
17 |
|
18 |
while (read(FILE,$record,64))
|
19 |
{
|
20 |
($flags,$status,$mode,$hdop,$vdop,$pdop,$sats,$timestampl,$timestamph,$latitude,$longitude,$altitude,$speed,$direction)=unpack("SCCCCCCLLddddd",$record);
|
21 |
|
22 |
|
23 |
if ($mode == 3) {
|
24 |
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($timestampl);
|
25 |
$datestring=sprintf("%02d.%02d.%d %02d:%02d:%02d",$mday,$mon+1,$year+1900,$hour,$min,$sec);
|
26 |
$long_dir="E";
|
27 |
$lat_dir="N";
|
28 |
if ($longitude < 0) {
|
29 |
$long_dir="W";
|
30 |
$logitude=-$longitude;
|
31 |
}
|
32 |
if ($latitude < 0) {
|
33 |
$lat_dir="S";
|
34 |
$latitude=-$latitude;
|
35 |
}
|
36 |
$long_deg=int($longitude);
|
37 |
$lat_deg=int($latitude);
|
38 |
$long_gps=$long_deg*100+($longitude-$long_deg)*60;
|
39 |
$lat_gps=$lat_deg*100+($latitude-$lat_deg)*60;
|
40 |
$lastpos="$lat_gps $lat_dir $long_gps $long_dir";
|
41 |
printf("\$GPGGA,%02d%02d%02d,%s,%s,%s,%s,1,%d,%s,%s,M,,,,0000*0C\n",$hour,$min,$sec,$lat_gps,$lat_dir,$long_gps,$long_dir,$sats,$hdop,$altitude);
|
42 |
printf("\$GPVTG,%s,T,,M,,N,%s,K,*6A\n",$direction,$speed*1.852);
|
43 |
printf(STDERR "\$GPGGA,%02d%02d%02d,%s,%s,%s,%s,1,%d,%s,%s,M,,,,0000*0C\n",$hour,$min,$sec,$lat_gps,$lat_dir,$long_gps,$long_dir,$sats,$hdop,$altitude);
|
44 |
sleep(1);
|
45 |
}
|
46 |
}
|