Pārlūkot izejas kodu

经纬度负数问题?

tags/v2.1.3
SmallChi pirms 5 gadiem
vecāks
revīzija
6f94837333
2 mainītis faili ar 91 papildinājumiem un 8 dzēšanām
  1. +64
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs
  2. +27
    -8
      src/JT808.Protocol/Formatters/MessageBodyFormatters/JT808_0x0200_Formatter.cs

+ 64
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs Parādīt failu

@@ -370,5 +370,69 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal("7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E", hex);
//7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E
}

[Fact]
public void Test6()
{
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
{
AlarmFlag = 1,
Altitude = 40,
GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
Lat = -12222222,
Lng = -132444444,
Speed = 60,
Direction = 0,
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
};
jT808UploadLocationRequest.StatusFlag = 402653184;
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
Assert.Equal("0000000118000000FF4580F2F81B0EE40028003C0000180715101010", hex);
}

[Fact]
public void Test6_1()
{
byte[] bodys = "0000000118000000FF4580F2F81B0EE40028003C0000180715101010".ToHexBytes();
JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
Assert.Equal(402653184u, jT808UploadLocationRequest.StatusFlag);
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
Assert.Equal(-12222222, jT808UploadLocationRequest.Lat);
Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
}

[Fact]
public void Test7()
{
JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200
{
AlarmFlag = 1,
Altitude = 40,
GPSTime = DateTime.Parse("2018-07-15 10:10:10"),
Lat = 12222222,
Lng = 132444444,
Speed = 60,
Direction = 0,
JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>()
};
jT808UploadLocationRequest.StatusFlag = 0x8000000;
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
Assert.Equal("000000010800000000BA7F0EF81B0EE40028003C0000180715101010", hex);
}

[Fact]
public void Test7_1()
{
byte[] bodys = "000000010800000000BA7F0EF81B0EE40028003C0000180715101010".ToHexBytes();
JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize<JT808_0x0200>(bodys);
Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag);
Assert.Equal((uint)0x8000000, jT808UploadLocationRequest.StatusFlag);
Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime);
Assert.Equal(12222222, jT808UploadLocationRequest.Lat);
Assert.Equal(-132444444, jT808UploadLocationRequest.Lng);
Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬
}
}
}

+ 27
- 8
src/JT808.Protocol/Formatters/MessageBodyFormatters/JT808_0x0200_Formatter.cs Parādīt failu

@@ -15,16 +15,21 @@ namespace JT808.Protocol.Formatters.MessageBodyFormatters
JT808_0x0200 jT808_0X0200 = new JT808_0x0200();
jT808_0X0200.AlarmFlag = reader.ReadUInt32();
jT808_0X0200.StatusFlag = reader.ReadUInt32();
jT808_0X0200.Lat = reader.ReadInt32();
jT808_0X0200.Lng = reader.ReadInt32();
JT808StatusProperty jT808StatusProperty = new JT808StatusProperty(Convert.ToString(jT808_0X0200.StatusFlag, 2).PadLeft(32, '0'));
if (jT808StatusProperty.Bit28 == '1')//西经
{
jT808_0X0200.Lng = -jT808_0X0200.Lng;
}
if (jT808StatusProperty.Bit29 == '1')//南纬
jT808_0X0200.Lng = reader.ReadInt32();
#warning 反解析的时候 负数
switch (jT808_0X0200.StatusFlag)
{
jT808_0X0200.Lat = -jT808_0X0200.Lat;
case 0x8000000: //西经 ‭134217728‬
//jT808_0X0200.Lng = -lng;
break;
case 0x10000000: //南纬 268435456
//jT808_0X0200.Lat = -lat;
break;
case 0x18000000: //西经-南纬 ‭402653184‬
//jT808_0X0200.Lat = -lat;
//jT808_0X0200.Lng = -lng;
break;
}
jT808_0X0200.Altitude = reader.ReadUInt16();
jT808_0X0200.Speed = reader.ReadUInt16();
@@ -82,6 +87,20 @@ namespace JT808.Protocol.Formatters.MessageBodyFormatters
{
writer.WriteUInt32(value.AlarmFlag);
writer.WriteUInt32(value.StatusFlag);
#warning 反解析的时候 负数
switch (value.StatusFlag)
{
case 0x8000000: //西经 ‭134217728‬
value.Lat = -value.Lat;
break;
case 0x10000000: //南纬 268435456
value.Lng = -value.Lng;
break;
case 0x18000000: //西经-南纬 ‭402653184‬
value.Lat = -value.Lat;
value.Lng = -value.Lng;
break;
}
writer.WriteInt32(value.Lat);
writer.WriteInt32(value.Lng);
writer.WriteUInt16(value.Altitude);


Notiek ielāde…
Atcelt
Saglabāt