From 202e2b3a8e0bdbbf4e719f538cb848615131b419 Mon Sep 17 00:00:00 2001
From: squallzhjch <zhangjingchao@navinfo.com>
Date: Tue, 17 Oct 2023 09:18:25 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B7=AF=E5=BE=84=E8=A7=84?=
 =?UTF-8?q?=E5=88=92=E5=A4=B1=E8=B4=A5=E6=8F=90=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../omqs/ui/activity/map/MainViewModel.kt     | 21 ++++++++++++++-
 .../java/com/navinfo/omqs/util/NaviEngine.kt  | 27 ++++++++++++++-----
 2 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
index 36be0428..8f79c704 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
@@ -403,7 +403,10 @@ class MainViewModel @Inject constructor(
                     naviOption = naviOption,
                     callback = object : OnNaviEngineCallbackListener {
 
-                        override fun planningPathStatus(status: NaviStatus) {
+                        override fun planningPathStatus(
+                            status: NaviStatus, linkdId: String?,
+                            geometry: String?
+                        ) {
                             when (status) {
                                 NaviStatus.NAVI_STATUS_PATH_PLANNING -> naviEngineStatus = 0
                                 NaviStatus.NAVI_STATUS_PATH_ERROR_NODE -> naviEngineStatus = 0
@@ -415,8 +418,24 @@ class MainViewModel @Inject constructor(
                                 NaviStatus.NAVI_STATUS_DIRECTION_OFF -> {}
                             }
                             liveDataNaviStatus.postValue(status)
+                            if (geometry != null) {
+                                viewModelScope.launch(Dispatchers.Main) {
+
+                                    val lineString = GeometryTools.createGeometry(geometry)
+                                    val envelope = lineString.envelopeInternal
+                                    mapController.animationHandler.animateToBox(
+                                        envelope.maxX,
+                                        envelope.maxY,
+                                        envelope.minX,
+                                        envelope.minY
+                                    )
+
+                                    mapController.lineHandler.showLine(geometry)
+                                }
+                            }
                         }
 
+
                         override suspend fun bindingResults(
                             route: NaviRoute?,
                             list: List<NaviRouteItem>
diff --git a/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt b/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt
index d2613b24..fa657a1e 100644
--- a/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt
+++ b/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt
@@ -11,15 +11,17 @@ import com.navinfo.omqs.bean.NaviRoute
 import com.navinfo.omqs.bean.NaviRouteItem
 import com.navinfo.omqs.db.RealmOperateHelper
 import io.realm.Realm
+import org.locationtech.jts.geom.Geometry
 import org.locationtech.jts.geom.LineString
 import org.locationtech.jts.geom.Point
 import org.oscim.core.GeoPoint
 
 interface OnNaviEngineCallbackListener {
-    fun planningPathStatus(code: NaviStatus)
+    fun planningPathStatus(code: NaviStatus, linkdId: String? = null, geometry: String? = null)
 
     //    fun planningPathError(errorCode: NaviStatus, errorMessage: String)
     suspend fun bindingResults(route: NaviRoute?, list: List<NaviRouteItem>)
+
 }
 
 enum class NaviStatus {
@@ -205,9 +207,12 @@ class NaviEngine(
         callback.planningPathStatus(NaviStatus.NAVI_STATUS_PATH_PLANNING)
         val pathList = mutableListOf<NaviRoute>()
         val realm = realmOperateHelper.getSelectTaskRealmInstance()
-        for (link in taskBean.hadLinkDvoList) {
+        Log.e("jingo", "路径计算 条数 ${taskBean.hadLinkDvoList.size}")
+        for (i in 0 until taskBean.hadLinkDvoList.size) {
+            val link = taskBean.hadLinkDvoList[i]
+            Log.e("jingo","获取 S E $i 总共 ${taskBean.hadLinkDvoList.size}")
             //测线不参与导航
-            if (link.linkStatus == 3) {
+            if (link!!.linkStatus == 3) {
                 continue
             }
             val route = NaviRoute(
@@ -255,13 +260,17 @@ class NaviEngine(
             }
             if (!bHasNode) {
                 callback.planningPathStatus(
-                    NaviStatus.NAVI_STATUS_PATH_ERROR_NODE
+                    NaviStatus.NAVI_STATUS_PATH_ERROR_NODE,
+                    link.linkPid,
+                    link.geometry
                 )
                 return
             }
             if (!bHasDir) {
                 callback.planningPathStatus(
-                    NaviStatus.NAVI_STATUS_PATH_ERROR_DIRECTION
+                    NaviStatus.NAVI_STATUS_PATH_ERROR_DIRECTION,
+                    link!!.linkPid,
+                    link.geometry
                 )
                 return
             }
@@ -346,7 +355,9 @@ class NaviEngine(
                 if (!bHasLast && !bHasNext) {
                     bBreak = false
                     callback.planningPathStatus(
-                        NaviStatus.NAVI_STATUS_PATH_ERROR_BLOCKED
+                        NaviStatus.NAVI_STATUS_PATH_ERROR_BLOCKED,
+                        tempRouteList[0].linkId,
+                        GeometryTools.getLineString(tempRouteList[0].pointList)
                     )
                     realm.close()
                     return
@@ -356,7 +367,9 @@ class NaviEngine(
 
         val itemMap: MutableMap<GeoPoint, MutableList<RenderEntity>> = mutableMapOf()
         //查询每根link上的关联要素
-        for (route in newRouteList) {
+        for (i in newRouteList.indices) {
+            val route = newRouteList[i]
+            Log.e("jingo","获取 插入要素 $i 总共 ${newRouteList.size}")
             itemMap.clear()
             //常规点限速
             val res = realm.where(RenderEntity::class.java)