Converter Segundos em Latitude

13 respostas
vcsmetallica

Galera,

Não estou sabendo como resolver isso. Preciso converter os segundos que vem do equipamento de rastreamento em Latitude e Longitude.
Por exemplo a Latitude vem assim 42867543 preciso transformar em decimal latitude.

Alguem poderia me ajudar?

Att

13 Respostas

pmlm

Completamente chutando no ar… isso está em segundos ou em milésimas de segundos?

Se for em milésimos poderá (obviamente não tenho a certeza que não sei o que esses dados realmente significam) ser assim:

42867543 mod 1000 = 543 :arrow: 543 milésimos de segundo
42867543/1000 = 42867
42867 mod 60 = 27 :arrow: 27 segundos
42867 / 60 = 714
714 mod 60 = 54 :arrow: 54 minutos
714 / 60 = 11 :arrow: 11 graus

Isso seria então 11º 54’ 27.543’’

vcsmetallica

Entao,

So que os dados do equipamento chega em centessimo de segundos ai eu divido por 100 para chegar nos segundos.
A informação chega em HEX.

FF82AE23 :arrow: [telefone removido]
[telefone removido] / 100 :arrow: 42867543

De acordo com o manual, de onde eu tirei esse dados as coordenada deveria ser essa:
FF82AE23 :arrow: 22.813769°

uso o seguinte metodo para converter de Hex para String

static String hexToBin(String s) {
        return new BigInteger(s, 16).toString();
    }
pmlm

E não diz como chegar a esse valor?

vcsmetallica

Sim,

Mas olha para vc ver o valor em HEX que te mostrei.
Esse valor em Hex tem que gerar a seguinte latitude: 22.813769.
Ate ai blza, no seu exemplo deu para entender como é feito.

Agora eu nao sei o que é , se é metodo que esta gerando de hex para string errado.

Att

pmlm

A conversão de hex para decimal está correcta.

A minha conversão foi um chute para o ar, se o valor que dá é diferente é porque a minha conversão não é a que eles usam.
Pegando na minha conversão e assumindo como dizes que 42867543 são os segundos, também não dá. Logo 42867543 não devem ser ainda os segundos.

pmlm

De uma pesquisa rápida encontrei o que deve ser o algoritmo:

Tens de converter para binário.

Se o bit mais significativo for 1, tens de fazer complemento de 2 e depois divides por 100 (as tais centésimas) e divides por 3600 (60min*60seg) e tens os graus
Senão basta fazer logo as divisões.

vcsmetallica

Esse trabalho todo é pq tenho que pegar as infoirmações de equipamentos de rastreamento da Magneti Marelli, o T-Box. Cara, é um saco esse negocio, e String de comnuicação vem toda em hex e vc ainda tem que ficar quebrando isso.
é um trabalho do cão.

Na documentação esta escrito assim:

Latitude in hundredth of seconds. South latitude will
return a negative value and this number should be
converted using 2?s complement.

O ponto em negrito que não entendi muito bem. as vezes pode ser esse ponto que esta avacalhando.

pmlm

Neste caso concreto

FF82AE23 :arrow: 11111111100000101010111000100011

Como o bit mais significativo é 1, invertem-se os bits: 00000000011111010101000111011100 e soma-se 1

00000000011111010101000111011101 :arrow: 8212957

8212957 / 360000 = 22,81376944

vcsmetallica

pmlm,

Valeu pela ajuda, so que estou com outro probleminha.

Sei que a duvida é meia riducula, mas como vc fez para inverter os bits?

Att

pmlm

Em cima do joelho:

String hex = "FF82AE23";

BigInteger number = new BigInteger(hex, 16);

char[] bits = number.toString(2).toCharArray();

if (bits[0]=='1'){
    for (int i = 0; i<bits.length; i++){
        if (bits[i] == '0'){
            bits[i] = '1';
        } else {
            bits[i] = '0';
        }
    }
    String newString = new String(bits);
    number = new BigInteger(newString,2);
    number = number.add(BigInteger.ONE);
}

BigDecimal result = new BigDecimal(number).divide(new BigDecimal("360000"), 6, RoundingMode.DOWN);

System.out.println(result);
vcsmetallica

Meu Filho de Deus,

Valeu pela ajuda!!!
Tem hora que vc fica meio perdido. Esse projeto ja esta atrasado e eu preciso finalizar para poder receber.

Inte

marciofermino

Amigo recibo essa string do gerador. Saberia me dizer como faço para transformar em latitude e longitude, acho que isso esta
vindo em milesegundou ou centesimos

nao tenho certeza,

qualquer ajuda é bem vinda.

imei:013226001446372,tracker,[telefone removido],011980563897,F,130854.000,A,2256.9480,S,04632.2735,W,0.00,; from 201.23.162.64(1544)
vcsmetallica

Amigo,

Qual o modelo do seu equipamento que esta usando?
Voce tem alguma documentação online que podemos dar uma olhada?

Att

Criado 1 de outubro de 2012
Ultima resposta 18 de fev. de 2013
Respostas 13
Participantes 3