From 4053e385bb8dc70ad8c8d12eeaec9c10ee87fcb9 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期一, 16 三月 2020 18:06:07 +0800
Subject: [PATCH] 更新地图

---
 lib/src/main/cpp/master/comm_if.cpp |   66 +++++++++++++++++++++++++++++++++
 1 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index b1ea6af..9c668ca 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -35,6 +35,8 @@
 #define ID_SM_RTK_PLAT_LOGIN     0x0005
 #define ID_SM_READ_MAP          0x0006
 #define ID_MS_MAP               0x8006
+#define ID_MS_ROAD_MAP          0x8013
+
 #define ID_SM_READ_CAR          0x0007
 #define ID_MS_CAR               0x8007
 #define ID_SM_MCU_BRIEF   0x0008
@@ -483,6 +485,70 @@
             ConfigPlatform(&cfg);
             break;
         }
+        case ID_MS_ROAD_MAP: {
+            Document doc;
+            doc.Parse(value);
+
+            if (!doc.HasParseError()) {
+                const Value &a = doc.GetArray();
+                if (a.IsArray()) {
+                    for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr) {
+                        // a Map
+                        int id, type, pointNum = 0;
+                        double (*map)[2] = NULL;
+                        int *line = NULL;
+
+                        if (itr->IsObject()) {
+                            if (itr->HasMember("id")) {
+                                const Value &s = (*itr)["id"];
+                                id = s.GetInt();
+                            }
+
+                            if (itr->HasMember("item")) {
+                                const Value &s = (*itr)["item"];
+                                type = s.GetInt();
+                            }
+
+                            if (itr->HasMember("map")) {
+                                const Value &s = (*itr)["map"];
+                                int i = 0, j = 0;
+
+                                pointNum = s.Size() / 2;
+                                map = (double (*)[2]) new double[pointNum][2];
+
+                                for (Value::ConstValueIterator itr2 = s.Begin();
+                                     itr2 != s.End(); ++itr2) {
+                                    map[i][j] = (*itr2).GetDouble();
+                                    if (++j == 2) {
+                                        j = 0;
+                                        i++;
+                                    }
+                                }
+                            }
+
+                            AddMap(id, type, map, pointNum, redLineNum, redLine, greenLine, redArea, triggerLine);
+
+                            if (itr->HasMember("red_line")) {
+                                const Value &s = (*itr)["red_line"];
+                                for (Value::ConstValueIterator itr2 = s.Begin();
+                                     itr2 != s.End(); ++itr2) {
+                                    // 鍙互杩炴帴涓轰竴鏉$嚎鐨勭偣
+                                    const Value &s2 = (*itr2)["line"];
+
+                                    lineNum = s2.Size() / 2;
+
+                                    for (Value::ConstValueIterator itr3 = s2.Begin();
+                                         itr3 != s2.End(); ++itr3) {
+                                        line[x++] = (*itr3).GetInt();
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            break;
+        }
         case ID_MS_MAP: {
             Document doc;
             doc.Parse(value);

--
Gitblit v1.8.0