2016-09-16 5 views
2

Concox TG06 GPSトラッカーがあります。 TCP経由でデータを受信して​​いますが、C#で緯度と経度の座標をデコードするのに苦労しています。プロトコルのマニュアルに従って、サーバへのトラッカ(端末)からのメッセージは、次のようになります。あなたが見ることができるようにConcox TR06 GPSトラッカーの4バイト緯度/ 4バイト経度のデコード

Concox TR06 position protocol

、緯度と経度の座標はそれぞれ4バイトです。さらに下、マニュアルは、これらの座標がフォーマットされている方法について説明:

5.2.1.6緯度 4バイトが消費され、位置データの緯度値を定義します。値の範囲は0〜162000000で、0〜90°の範囲を示します。その変換方法は次の通りである。 GPSモジュールが出力する緯度と経度の値を分に基づく小数に変換する。変換された10進数に30000を掛けます。乗算結果を16進数に変換する。例:22º32.7658' =(22X60 + 32.7658)X30000 = 40582974、最後の値で進数40582974(10進数)= 26B3F3E(16進数)に変換本当にに苦しんでい

0x02の0x6Bは0x3F 0x3Eでありますこれを後ろ向きに処理します。つまり、4バイト(0x02 0x6B 0x3F 0x3E)から緯度座標(コードで小数点以下の桁数を使用する場合は、必ずしも度と分ではありません)を取得します。

private double DecodeLat(byte[] latBytes) 
{ 
    double latitude; 
    // implementation 
    return latitude; 
{ 

(と経度のため、明らかに同じ):基本的に私は、そのシェルのようになります関数を作成しようとしています。私は大いにどんな助けにも感謝します!

は、次のようにあなたがそれをデコードすることができ、あなたに

+0

私たちは実装を見ることができますか? –

+0

私はこのデバイスを使ってサーバーとストアデータを作成しています。初期データとして** **が取得されています。私はそれを解読することができません。いくつかのリンクを共有したり、ダミーサンプルを共有してください。ありがとう。 – Tauqir

答えて

2

ありがとう:

public static decimal DecodeLatitude(byte[] bytes) 
{ 
    decimal minutes = (bytes[0] << 24) + (bytes[1] << 16) + (bytes[2] << 8) + bytes[3]; 
    minutes /= 30000; 

    return minutes; 
} 

は例hereを参照してください。私は実装を見ることができないので、

+0

こんにちはPhylogenesis。返信いただきありがとうございます。残念ながら私は奇妙な価値観を見せているようですが、南アフリカ、そして南半球にあり、ネガティブがどのように処理されているのか疑問に思っています....最も重要なビットが半球を表しているのでしょうか? – user1900799

+0

理由はわかりませんが、コードに別の行を追加しました。 分/ = 60; それは必要なように見えたためです:)それは良く見えます...それが正しいとすぐにお知らせします... – user1900799

+0

@ user1900799これは関数が分数を返してから60分ですある程度 – Phylogenesis

1

経度は4バイト である私は、あなたが、これは私にしてみましょう当てはまらない場合

BitConverter.ToDouble(Buffer, index); 

ダブル= 8バイト

でダブルを読み取ろう を想定しますコメントで知ってください