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

Responder a