Kalevi_Harkonen wrote:Jahas, tuntuu tämä olevan aikamoinen suo. Google kartassa sain sentään jäljen näkymään. Sitten hain kirjastosta CD Merikartan, joka nähtävästi haluaa reittitiedoston sisään .mcd tiedostona. Mukana tuli ohjelma, joka osaa konvertoida .wpl, .mst, .grm ja .trk tiedostot Merikartalle, mutta mitään niistä taas ei löydy GPSBaabelista.
GPSBaabelin tekemä NMEA tiedosto on tekstieditorilla luettavissa, mutta Merikartalla tehty ja tallennettu reitti ei ole lukukelpoinen.
Pitäisikö olla CD Merikartasta uudempi versio? Tämä on v. 2004.
Haraldista huolimatta käytän CD Merikarttaa, tosin en koskaan veneen liikkuessa, vaan ainoastaan reittien suunnitteluun ja trackien katsomiseen.
CD Merikartta lukee sisään kutakuinkin NMEA-muotoista dataa "lokin toistoon". Olen tehnyt hyvin yksinkertaisen skriptin, jolla muunnan Garminin trackit tuohon muotoon. Tulos näyttää tältä:
res=1
$GPGGA,144030,6006.931,N,2440.919,E,1,06,1.0,0.0,M,-34.0,M,0.0,0000
$GPVTG,315.10,T,,,-0.00,N,-0.00,K
res=1
$GPGGA,144130,6006.931,N,2440.922,E,1,06,1.0,0.0,M,-34.0,M,0.0,0000
$GPVTG,90.00,T,,,0.10,N,0.18,K
Tuossa GPGGA:ssa on siis kellonaika (14:40:30), paikka ja loput "turhaa" ko. käyttöön. Sitten GPVTG:ssä on suunta ja nopeus (toisessa rimpsussa 0,1 kn ja 0,18 km/h)
Ja muunnosohjelma (awk-skripti) tältä:
Code: Select all
BEGIN{
start=0;
TR=-1;
oldtime=-1000;
FS=","
}
{
if(match($0, "TP")!=0)
{
if($7==1)
{
TR++;
start=1;
i[TR]=0;
}
if(start==1 && $0!="")
{
STR[TR,i[TR]]=$0;
i[TR]++;
}
}
}
END{
maxTR=TR+1;
for(TR=0; TR <= maxTR; TR++)
{
if(i[TR]>0)
{
for(j=0;j<i[TR];j++)
{
$0=STR[TR, j];
print "res=1";
gsub(":", "", $6);
time=$6;
h=substr(time,1,2);
min=substr(time,3,2);
sec=substr(time,5,2);
timeh=h + min/60.0 + sec/3600.0;
NorS="N";
Ndeg=substr($3,0,3);
Nmin=substr($3,4)*60.0;
EorW="E";
Edeg=substr($4,0,3);
Emin=substr($4,4)*60.0;
printf("$GPGGA,%d,%.3f,%c,%.3f,%c,1,06,1.0,0.0,M,-34.0,M,0.0,0000\n", time, Ndeg*100+Nmin, NorS, Edeg*100+Emin,EorW);
COG=0.0;
SOG=0.0;
N=$3;
E=$4;
if((timeh-oldtimeh) < 0.2 && (timeh-oldtime) > 0.0001)
{
if(((E-oldE)*(E-oldE))>1e-20)
COG=180/3.14159*atan2(N-oldN, (oldE-E)*cos(3.14159*N/180.0))-90.0;
else
{
if(N > oldN)
COG=0.0;
else
COG=180.0;
}
if(COG < 0.0)
{
COG+=360.0;
}
SOG=60.0*sqrt((E-oldE)*cos(3.14159*N/180.0)*(E-oldE)*cos(3.14159*N/180.0) + (N-oldN)*(N-oldN));
SOG/=(timeh-oldtimeh);
}
printf("$GPVTG,%.2f,T,,,%.2f,N,%.2f,K\n",COG,SOG,SOG*1.852);
oldtimeh=timeh;
oldN=N;
oldE=E;
}
}
}
}
Joakim
mode edit(hh): code-tagit lisätty