From 8a1b6b1382fbd75445414f30c450cc6973dce03e Mon Sep 17 00:00:00 2001
From: "SmallChi(Koike)" <564952747@qq.com>
Date: Mon, 28 Jun 2021 14:49:18 +0800
Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E7=B2=A4=E6=A0=87=E6=94=AF?=
 =?UTF-8?q?=E6=8C=81=202.=E5=A2=9E=E5=8A=A0808=E7=9A=842013=E5=BC=BA?=
 =?UTF-8?q?=E5=88=B6=E8=A7=A3=E6=9E=90=203.=E4=BF=AE=E5=A4=8D=E7=BB=8F?=
 =?UTF-8?q?=E7=BA=AC=E5=BA=A6=E8=A7=A3=E6=9E=90=E5=BC=82=E5=B8=B8=E6=8A=A5?=
 =?UTF-8?q?=E9=94=99=E6=8D=95=E8=8E=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ...afety_Config.cs => JT808_SuBiao_Config.cs} |  4 +-
 src/JTTools/Configs/JT808_YueBiao_Config.cs   | 13 +++
 src/JTTools/JTTools.csproj                    | 13 +--
 src/JTTools/Pages/Index.razor                 |  5 +-
 src/JTTools/Pages/JT808Analyze.razor          | 37 +++++---
 src/JTTools/Pages/Map.razor                   | 84 +++++++++++--------
 src/JTTools/Program.cs                        |  9 +-
 7 files changed, 104 insertions(+), 61 deletions(-)
 rename src/JTTools/Configs/{JT808_JTActiveSafety_Config.cs => JT808_SuBiao_Config.cs} (71%)
 create mode 100644 src/JTTools/Configs/JT808_YueBiao_Config.cs

diff --git a/src/JTTools/Configs/JT808_JTActiveSafety_Config.cs b/src/JTTools/Configs/JT808_SuBiao_Config.cs
similarity index 71%
rename from src/JTTools/Configs/JT808_JTActiveSafety_Config.cs
rename to src/JTTools/Configs/JT808_SuBiao_Config.cs
index 64994db..ba132cd 100644
--- a/src/JTTools/Configs/JT808_JTActiveSafety_Config.cs
+++ b/src/JTTools/Configs/JT808_SuBiao_Config.cs
@@ -6,8 +6,8 @@ using System.Threading.Tasks;
 
 namespace JTTools.Configs
 {
-    public class JT808_JTActiveSafety_Config : GlobalConfigBase
+    public class JT808_SuBiao_Config : GlobalConfigBase
     {
-        public override string ConfigId { get; protected set; } = "JT808_JTActiveSafety_Config";
+        public override string ConfigId { get; protected set; } = "JT808_SuBiao_Config";
     }
 }
diff --git a/src/JTTools/Configs/JT808_YueBiao_Config.cs b/src/JTTools/Configs/JT808_YueBiao_Config.cs
new file mode 100644
index 0000000..925f7e3
--- /dev/null
+++ b/src/JTTools/Configs/JT808_YueBiao_Config.cs
@@ -0,0 +1,13 @@
+using JT808.Protocol.Interfaces;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace JTTools.Configs
+{
+    public class JT808_YueBiao_Config : GlobalConfigBase
+    {
+        public override string ConfigId { get; protected set; } = "JT808_YueBiao_Config";
+    }
+}
diff --git a/src/JTTools/JTTools.csproj b/src/JTTools/JTTools.csproj
index d6b4e8d..3c2745f 100644
--- a/src/JTTools/JTTools.csproj
+++ b/src/JTTools/JTTools.csproj
@@ -7,18 +7,19 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="AntDesign" Version="0.8.1" />
+    <PackageReference Include="AntDesign" Version="0.8.2" />
     <PackageReference Include="JT1078" Version="1.1.0" />
-    <PackageReference Include="JT808" Version="2.4.0" />
-    <PackageReference Include="JT808.Protocol.Extensions.JT1078" Version="2.3.7" />
-    <PackageReference Include="JT808.Protocol.Extensions.JTActiveSafety" Version="1.1.7" />
+    <PackageReference Include="JT808" Version="2.4.1" />
+    <PackageReference Include="JT808.Protocol.Extensions.JT1078" Version="2.4.1" />
     <PackageReference Include="JT808.Protocol.Extensions.Streamax" Version="0.2.7" />
+    <PackageReference Include="JT808.Protocol.Extensions.SuBiao" Version="2.4.1" />
+    <PackageReference Include="JT808.Protocol.Extensions.YueBiao" Version="2.4.1" />
     <PackageReference Include="JT809" Version="2.2.0" />
     <PackageReference Include="JT809.Protocol.Extensions.JT1078" Version="2.2.0" />
     <PackageReference Include="JTActiveSafety" Version="1.0.1" />
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.6" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.7" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
-    <PackageReference Include="NLog.Extensions.Logging" Version="1.7.2" />
+    <PackageReference Include="NLog.Extensions.Logging" Version="1.7.3" />
   </ItemGroup>
 
 </Project>
diff --git a/src/JTTools/Pages/Index.razor b/src/JTTools/Pages/Index.razor
index b5a4fa4..82c9180 100644
--- a/src/JTTools/Pages/Index.razor
+++ b/src/JTTools/Pages/Index.razor
@@ -2,12 +2,13 @@
 
 <Title Level="1">JTTools</Title>
 <Paragraph>
-    <Title Level="3">JT808、JT809、JT1078、JT19056、JTNE(新能源)、主动安全(苏标)解析工具</Title>
+    <Title Level="3">JT808、JT809、JT1078、JT19056、JTNE(新能源)、JT808主动安全(苏标)解析工具、JT808主动安全(粤标)解析工具</Title>
     <Text>
         <Badge Color="red" />支持锐明808公交业务扩展协议<br />
         <Badge Color="red" />支持主动安全附件(苏标)分析工具<br />
         <Badge Color="red" />增加808分包解析<br />
         <Badge Color="red" />增加地图-经纬度解析<br />
-        <Badge Color="red" />增加808分包的各个包的解析及展示
+        <Badge Color="red" />增加808分包的各个包的解析及展示<br />
+        <Badge Color="red" />支持808(粤标)分析工具<br />
     </Text>
 </Paragraph>
\ No newline at end of file
diff --git a/src/JTTools/Pages/JT808Analyze.razor b/src/JTTools/Pages/JT808Analyze.razor
index 1c8b250..8dc1fc9 100644
--- a/src/JTTools/Pages/JT808Analyze.razor
+++ b/src/JTTools/Pages/JT808Analyze.razor
@@ -9,18 +9,20 @@
 @using System.Text.Unicode;
 @inject IJT808Config  config
 @inject JT808_JT1078_Config  jT808_JT1078_Config
-@inject JT808_JTActiveSafety_Config  jT808_JTActiveSafety_Config
+@inject JT808_SuBiao_Config  jT808_SuBiao_Config
 @inject JT808_Streamax_Config  jT808_Streamax_Config
 @using OneOf;
 
 <Tag Color="blue">如有分包,请换行区分。</Tag>
 <br />
-<Select TItemValue="string" TItem="string" @bind-Value="@protocolType" Style="width:200px" OnSelectedItemChanged="OnSelectProtocolType">
+<Select TItemValue="string" TItem="string" @bind-Value="@protocolType" Style="width:260px" OnSelectedItemChanged="OnSelectProtocolType">
     <SelectOptions>
-        <SelectOption TItemValue="string" TItem="string" Label="国标" Value="@("JT808")" />
+        <SelectOption TItemValue="string" TItem="string" Label="国标(通过包自动识别版本号)" Value="@("JT808")" />
         <SelectOption TItemValue="string" TItem="string" Label="国标扩展JT1078" Value="@("JT808_JT1078")" />
-        <SelectOption TItemValue="string" TItem="string" Label="国标扩展主动安全(苏标)" Value="@("JT808_JTAS")" />
+        <SelectOption TItemValue="string" TItem="string" Label="国标扩展主动安全(苏标)" Value="@("JT808_SuBiao")" />
+        <SelectOption TItemValue="string" TItem="string" Label="国标扩展主动安全(粤标)" Value="@("JT808_YueBiao")" />
         <SelectOption TItemValue="string" TItem="string" Label="公交扩展协议(锐明)" Value="@("JT808_JTRM")" />
+        <SelectOption TItemValue="string" TItem="string" Label="国标(强制使用2013版本解析)" Value="@("JT2013Force")" />
     </SelectOptions>
 </Select>
 
@@ -33,7 +35,7 @@
     <Alert Type="@AlertType.Error" Description="@ErrerMessage" Closable AfterClose="OnDismiss" />
 }
 
-<div class="right">
+<div style="padding: 26px; min-height: 350px">
     @if (JT808HeaderPackages != null)
     {
         <AntList DataSource="@JT808HeaderPackages" TItem="JT808HeaderPackage">
@@ -69,7 +71,9 @@
 
     private JT808Serializer JTRM_Serializer;
 
-    private JT808Serializer JTAS_Serializer;
+    private JT808Serializer JTSuBiao_Serializer;
+
+    private JT808Serializer JTYueBiao_Serializer;
 
     private JT808Serializer JT1078Serializer;
 
@@ -77,6 +81,7 @@
     private List<JT808HeaderPackage> JT808HeaderPackages;
     private string HexData = HexDataTmp;
     private static string HexDataTmp = "7E 02 00 00 26 12 34 56 78 90 12 00 7D 02 00 00 00 01 00 00 00 02 00 BA 7F 0E 07 E4 F1 1C 00 28 00 3C 00 00 18 10 15 10 10 10 01 04 00 00 00 64 02 02 00 7D 01 13 7E";
+    private static string Hex2013ForceTmp = "7e0102400c01003000068109024a3130303330303030363831857e";
     private static string HexSubDataTmp = "7E120523A204066657506200EB00020001015A00000023012012191042052012191050190000000000000000000101064446D10120121910221720121910420500000000000000000001010F1FE8EB0120121910023420121910221700000000000000000001010F182D5C0120121909471120121910015500000000000000000001010B38F2430120121909274020121909471100000000000000000001010F056DB40120121909080920121909274000000000000000000001010F0724380120121908483820121909080900000000000000000001010F0530AB0120121908290720121908483800000000000000000001010F05896C0120121908093720121908290700000000000000000001010F02CD3B0120121907500520121908093700000000000000000001010F056FEF0120121907303420121907500500000000000000000001010F043C3401201219072541201219073034000000000000000000010103C26C5F0120121907061120121907254100000000000000000001010F03F0C10120121906464220121907061100000000000000000001010F02F6330120121906271220121906464200000000000000000001010F02E43B0120121906074220121906271200000000000000000001010F033D670120121905481120121906074200000000000000000001010F088BF20120121905284120121905481100000000000000000001010F03F9FE0120121905091020121905284100000000000000000001010F05B1040120121904494020121905091000000000000000000001010F02B3540120121904301020121904494000000000000000000001010F0417B00120121904103920121904301000000000000000000001010F0538970120121903510820121904103900000000000000000001010F054E9E0120121903313820121903510800000000000000000001010F016ECB0120121903120820121903313800000000000000000001010F0333C00120121902523820121903120700000000000000000001010F029D230120121902330720121902523700000000000000000001010F0354E40120121902133720121902330700000000000000000001010F03303D0120121901540720121902133700000000000000000001010F04981E0120121901343720121901540700000000000000000001010F02AD940120121901150820121901343700000000000000000001010EFFD7CF0120121900553720121901150800000000000000000001010F07D9330120121900360720121900553700000000000000000001010F040E740C7E\n7E1205203804066657506200EC000200020120121900163320121900360700000000000000000001010F0CE4CD0120121900002220121900163300000000000000000001010C6F9E7B5D7E";
 
     private string Json;
@@ -96,6 +101,10 @@
         {
             HexData = HexSubDataTmp;
         }
+        else if("JT2013Force"== protocolType)
+        {
+            HexData = Hex2013ForceTmp;
+        }
         else
         {
             HexData = HexDataTmp;
@@ -113,7 +122,7 @@
     {
         Serializer = config.GetSerializer();
         JT1078Serializer = jT808_JT1078_Config.GetSerializer();
-        JTAS_Serializer = jT808_JTActiveSafety_Config.GetSerializer();
+        JTSuBiao_Serializer = jT808_SuBiao_Config.GetSerializer();
         JTRM_Serializer = jT808_Streamax_Config.GetSerializer();
     }
 
@@ -135,12 +144,15 @@
                     case "JT808_JT1078":
                         Json = JT1078Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
                         break;
-                    case "JT808_JTAS":
-                        Json = JTAS_Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
+                    case "JT808_SuBiao":
+                        Json = JTSuBiao_Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
                         break;
                     case "JT808_JTRM":
                         Json = JTRM_Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
                         break;
+                    case "JT2013Force":
+                        Json = Serializer.Analyze(data, JT808.Protocol.Enums.JT808Version.JTT2013Force ,options: JTJsonWriterOptions.Instance);
+                        break;
                 }
             }
             else if (hexs.Length > 1)
@@ -172,12 +184,15 @@
                         case "JT808_JT1078":
                             Json = JT1078Serializer.Analyze(msgid, bodies.ToArray(), options: JTJsonWriterOptions.Instance);
                             break;
-                        case "JT808_JTAS":
-                            Json = JTAS_Serializer.Analyze(msgid, bodies.ToArray(), options: JTJsonWriterOptions.Instance);
+                        case "JT808_SuBiao":
+                            Json = JTSuBiao_Serializer.Analyze(msgid, bodies.ToArray(), options: JTJsonWriterOptions.Instance);
                             break;
                         case "JT808_JTRM":
                             Json = JTRM_Serializer.Analyze(msgid, bodies.ToArray(), options: JTJsonWriterOptions.Instance);
                             break;
+                        case "JT2013Force":
+                            Json = Serializer.Analyze(msgid, bodies.ToArray(), JT808.Protocol.Enums.JT808Version.JTT2013Force, options: JTJsonWriterOptions.Instance);
+                            break;
                     }
                 }
                 else
diff --git a/src/JTTools/Pages/Map.razor b/src/JTTools/Pages/Map.razor
index aba89f0..51a225f 100644
--- a/src/JTTools/Pages/Map.razor
+++ b/src/JTTools/Pages/Map.razor
@@ -13,7 +13,7 @@
     <Radio RadioButton Value="@("BD09")">BD09</Radio>
 </RadioGroup>
 <br />
-<AntDesign.Input @bind-Value="LngLat" style="width: 450px;" Size="large" AllowClear>
+<AntDesign.Input @bind-Value="LngLat" Size="large" AllowClear>
     <AddOnBefore>经纬度</AddOnBefore>
 </AntDesign.Input>
 <Button Type="primary" @onclick="Convert" Size="large">
@@ -71,55 +71,65 @@
 
     void OnSelectedCoordinateTypeChanged(string e)
     {
+        isOpen = false;
         if (string.IsNullOrEmpty(LngLat))
         {
             return;
         }
-        string[] arr = LngLat.Split(new string[]{ ",", ",", "|", ":" }, StringSplitOptions.RemoveEmptyEntries);
+        string[] arr = LngLat.Split(new string[]{ ",", ",", "|", ":",";",";" }, StringSplitOptions.RemoveEmptyEntries);
         List<double> wgs84s = new List<double>();
         List<double> gcj02s = new List<double>();
         List<double> bd09s = new List<double>();
         for (var i=0;i< arr.Length; i=i+2)
         {
-            if (double.TryParse(arr[i], out double lng) && double.TryParse(arr[i+1], out double lat))
+            try
             {
-                if (e == "WGS84")
+                if (double.TryParse(arr[i], out double lng) && double.TryParse(arr[i + 1], out double lat))
                 {
-                    wgs84s.Add(lng);
-                    wgs84s.Add(lat);
-                    var gcj02 = Coordtransform.Wgs84togcj02(lng, lat);
-                    gcj02s.Add(gcj02[0]);
-                    gcj02s.Add(gcj02[1]);
-                    var bd09 = Coordtransform.Wgs84tobd09(lng, lat);
-                    bd09s.Add(bd09[0]);
-                    bd09s.Add(bd09[1]);
-                }
-                else if (e == "GCJ02")
-                {
-                    gcj02s.Add(lng);
-                    gcj02s.Add(lat);
-                    var wgs84 = Coordtransform.Gcj02towgs84(lng, lat);
-                    wgs84s.Add(wgs84[0]);
-                    wgs84s.Add(wgs84[1]);
-                    var bd09 = Coordtransform.Gcj02tobd09(lng, lat);
-                    bd09s.Add(bd09[0]);
-                    bd09s.Add(bd09[1]);
-                }
-                else if (e == "BD09")
-                {
-                    bd09s.Add(lng);
-                    bd09s.Add(lat);
-
-                    var wgs84 = Coordtransform.Bd09towgs84(lng, lat);
-                    wgs84s.Add(wgs84[0]);
-                    wgs84s.Add(wgs84[1]);
-
-                    var gcj02 = Coordtransform.Bd09togcj02(lng, lat);
-                    gcj02s.Add(gcj02[0]);
-                    gcj02s.Add(gcj02[1]);
-
+                    if (e == "WGS84")
+                    {
+                        wgs84s.Add(lng);
+                        wgs84s.Add(lat);
+                        var gcj02 = Coordtransform.Wgs84togcj02(lng, lat);
+                        gcj02s.Add(gcj02[0]);
+                        gcj02s.Add(gcj02[1]);
+                        var bd09 = Coordtransform.Wgs84tobd09(lng, lat);
+                        bd09s.Add(bd09[0]);
+                        bd09s.Add(bd09[1]);
+                    }
+                    else if (e == "GCJ02")
+                    {
+                        gcj02s.Add(lng);
+                        gcj02s.Add(lat);
+                        var wgs84 = Coordtransform.Gcj02towgs84(lng, lat);
+                        wgs84s.Add(wgs84[0]);
+                        wgs84s.Add(wgs84[1]);
+                        var bd09 = Coordtransform.Gcj02tobd09(lng, lat);
+                        bd09s.Add(bd09[0]);
+                        bd09s.Add(bd09[1]);
+                    }
+                    else if (e == "BD09")
+                    {
+                        bd09s.Add(lng);
+                        bd09s.Add(lat);
+
+                        var wgs84 = Coordtransform.Bd09towgs84(lng, lat);
+                        wgs84s.Add(wgs84[0]);
+                        wgs84s.Add(wgs84[1]);
+
+                        var gcj02 = Coordtransform.Bd09togcj02(lng, lat);
+                        gcj02s.Add(gcj02[0]);
+                        gcj02s.Add(gcj02[1]);
+
+                    }
                 }
             }
+            catch(Exception ex)
+            {
+                isOpen = true;
+                ErrerMessage = ex.Message;
+                break;
+            }
         }
         WGS84_LngLat = string.Join(',', wgs84s);
         GCJ02_LngLat = string.Join(',', gcj02s);
diff --git a/src/JTTools/Program.cs b/src/JTTools/Program.cs
index c042d97..e4635b0 100644
--- a/src/JTTools/Program.cs
+++ b/src/JTTools/Program.cs
@@ -1,7 +1,8 @@
 using System;
 using JT808.Protocol;
 using JT808.Protocol.Extensions.JT1078;
-using JT808.Protocol.Extensions.JTActiveSafety;
+using JT808.Protocol.Extensions.SuBiao;
+using JT808.Protocol.Extensions.YueBiao;
 using JT809.Protocol;
 using JT809.Protocol.Extensions.JT1078;
 using Microsoft.AspNetCore.Hosting;
@@ -71,8 +72,10 @@ namespace JTTools
                 .ConfigureServices(services =>
                 {
                     services.AddJT808Configure();
-                    services.AddJT808Configure(new JT808_JTActiveSafety_Config())
-                            .AddJTActiveSafetyConfigure();
+                    services.AddJT808Configure(new JT808_SuBiao_Config())
+                            .AddSuBiaoConfigure();
+                    services.AddJT808Configure(new JT808_YueBiao_Config())
+                            .AddYueBiaoConfigure();
                     services.AddJT808Configure(new JT808_JT1078_Config())
                             .AddJT1078Configure();
                     services.AddJT809Configure(new JT809_2011_Config())