[Talk-es] Traducción longitudesª
Jose Luis Perez Diez
jluis en escomposlinux.org
Jue Abr 19 16:36:30 BST 2012
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_HZU03B1Q en mail.gmail.com>
D0304202200F6BA1F7880A4A0E001A77
D0304201E00F6A2FF7878A4007001A76
D0304201A00F699EF787B0008A001A75
D0304201200F699CF787AE006D001A75
D0304200A00F699BF787B20061001A75
D0304200200F699FF787AF0057001A75
#Message-ID: <CAAveYebHM2g2U4UeMC_YxG51nibnukVeZbYZ1eWxH8fH8t6JKw en 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”
Más información sobre la lista de distribución Talk-es