El Wednesday 18 April 2012 17:48:04 Jonay Santana va escriure: > Luego hay un par de campos más que no sé qué son, y casi siempre > están a cero o a nulo. Yo he descifrado la latitud (en las posiciones > 10 a 15), la velocidad (en las posiciones 22 a 23), y los kilómetros > recorridos (30 y 31). > > > (los bits 6:8 y 9:11 son compatibles con las cordenadas que te puede dar un > > vehiculo > > terrestre dos lecturas seguidas no se han de diferenciar en mas de un valor > > de 11 bits) > > Esta parte no la he entendido... :( >
Perdona que me explique tan mal, un vehículo terrestre nunca ira a mas de 3' por minuto en tus latitudes esto son 1800 unidades < 2^11. estoy investigando los datos que enviaste usando el siguiente programa: #!perl use strict; use warnings; # 1111111111222222222233 #01234567890123456789012345678901 #D0304202200F6BA1F7880A4A0E001A77 # ------ sub onesComplement { my $number = shift; my $length = shift || 24; if ($number >= 1 << $length-1){ return -($number ^ ((1 << ($length))-1) ); } return $number } sub twoComplement { my $number = shift; my $length = shift || 24; if ($number >= 1 << $length-1) { my $comp = (1 << $length)-1; my $result = -(($number - 1) ^ $comp ); return $result ; } return $number } sub signMag { my $number = shift; my $length = shift || 24; if ($number >= 1 << $length-1){ return -($number and ((1 << $length-1) -1) ); } return $number } sub degrees{ my $number = shift; my $sign = ""; # if ($number < 0) { # $sign = "-"; # $number = -$number; # } my $segundos = ($number % 600)/10; my $minutos = int ($number / 600) % 60; my $grados = int( int ($number/600) /60); return "$sign$gradosº $minutos' $segundos''"; } print degrees(-1)."\n"; while (my $linea = <DATA>) { if ($linea =~ /#/) { print $linea; next } else { my $latitud = hex(substr($linea,10,6)); my $longitud = hex(substr($linea,16,6)); my $velocidad = hex(substr($linea,22,2)); my $dist = hex(substr($linea,30,2)); print "2comp ".degrees(twoComplement($latitud))." ".degrees(twoComplement($longitud))." ($velocidad $dist)\n"; print "1comp ".degrees(onesComplement($latitud))." ".degrees(onesComplement($longitud))." ($velocidad $dist)\n"; print "SignM ".degrees(signMag($latitud))." ".degrees(signMag($longitud))." ($velocidad $dist) "; } print substr($linea,32) } __DATA__ #Message-ID: <caaveyey34cvrcu8dx12dvnt+mxh6hvoxsbwt0w-vr_hzu03...@mail.gmail.com> D0304202200F6BA1F7880A4A0E001A77 D0304201E00F6A2FF7878A4007001A76 D0304201A00F699EF787B0008A001A75 D0304201200F699CF787AE006D001A75 D0304200A00F699BF787B20061001A75 D0304200200F699FF787AF0057001A75 #Message-ID: <caaveyebhm2g2u4uemc_yxg51nibnukvezbyz1ewxh8fh8t6...@mail.gmail.com> D0304205E00F73E2F77A192A5B001A88 -> 2012.01.01-00.23.32 = NO ESTÁ D0304205A00F748CF77A8B2B6D001A87 -> 2012.01.01-00.22.32 = -15º25’53.3” D0304205600F7562F77AB2326B001A86 -> 2012.01.01-00.21.32 = NO ESTÁ D0304205200F7588F77B924B8D001A86 -> 2012.01.01-00.20.32 = -15º25’56.3” D0304204E00F7514F77D76509D001A84 -> 2012.01.01-00.19.32 = NO ESTÁ D0304204A00F7471F77F03507A001A83 -> 2012.01.01-00.18.32 = -15º25’56.3” D0304204600F7374F78067539D001A82 -> 2012.01.01-00.17.32 = NO ESTÁ D0304204200F736AF782234A80001A80 -> 2012.01.01-00.16.32 = -15º25’56.3” D0304203E00F7351F783E94988001A7F -> 2012.01.01-00.15.32 = NO ESTÁ AF304203A00F738FF785A63500001A7E -> 2012.01.01-00.14.32 = -15º25’56.5” D0304203600F733CF7867D4DA3001A7D -> 2012.01.01-00.13.32 = NO ESTÁ D0304203200F71E2F787B050A3001A7C -> 2012.01.01-00.12.32 = -15º25’56.5” D0304202E00F7055F7888852A8001A7B -> 2012.01.01-00.11.32 = NO ESTÁ D0304202A00F6EA6F788985208001A79 -> 2012.01.01-00.10.32 = -15º25’56.3” D0304202600F6D28F7880E4CAF001A78 -> 2012.01.01-00.09.32 = NO ESTÁ D030420A600F70ABF77B922127001A8D -> 2012.01.01-00.41.32 = NO ESTÁ D030420A200F7134F77B382911001A8C -> 2012.01.01-00.40.32 = -15º25’56.3” D0304209E00F7127F77AD81301001A8C -> 2012.01.01-00.39.32 = NO ESTÁ D0304209A00F712CF77A8E1A41001A8B -> 2012.01.01-00.38.32 = -15º25’56.5” D0304209600F716DF77A00193A001A8B -> 2012.01.01-00.37.32 = NO ESTÁ D0304209200F71C4F779872B22001A8B -> 2012.01.01-00.36.32 = -15º25’56.3” D0304208E00F71C4F778E81D5D001A8A -> 2012.01.01-00.35.32 = NO ESTÁ D0304208A00F71D1F7791C0C9A001A8A -> 2012.01.01-00.34.32 = -15º25’56.6” D0304208600F71D1F7793F0051001A8A -> 2012.01.01-00.33.32 = NO ESTÁ D0304207E00F71CFF7793F0046001A8A -> 2012.01.01-00.31.32 = NO ESTÁ D0304207600F71D0F7793F0044001A8A -> 2012.01.01-00.29.32 = NO ESTÁ D0304206E00F71D1F779400042001A8A -> 2012.01.01-00.27.32 = NO ESTÁ D0304206A00F71E3F7794B0060001A8A -> 2012.01.01-00.26.32 = -15º25’56.1” D0304206600F71E9F779BC3473001A89 -> 2012.01.01-00.25.32 = NO ESTÁ D0304206200F72DFF77A383755001A88 -> 2012.01.01-00.24.32 = -15º25’56.1” _______________________________________________ Talk-es mailing list Talk-es@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-es