From b69f4fc9c619cec4d4ba4699bc376c848a0a707f Mon Sep 17 00:00:00 2001
From: squallzhjch <zhangjingchao@navinfo.com>
Date: Fri, 13 Oct 2023 15:08:26 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A1=A5=20=E5=B0=8F?=
 =?UTF-8?q?=E5=88=86=E7=B1=BB=E9=97=AE=E9=A2=98=20=E4=BF=AE=E6=94=B9=20?=
 =?UTF-8?q?=E5=8C=9D=E9=81=93=E9=97=AE=E9=A2=98=20=E4=BF=AE=E6=94=B9?=
 =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8A=E4=BC=A0=E5=AD=97=E6=AE=B5=E6=94=B9?=
 =?UTF-8?q?=E5=8A=A8=E9=97=AE=E9=A2=98=20=E5=A2=9E=E5=8A=A0=E8=BD=A8?=
 =?UTF-8?q?=E8=BF=B9=E5=9B=9E=E6=94=BE=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/src/main/assets/omdb_config.json          |  1 +
 .../com/navinfo/omqs/bean/EvaluationInfo.kt   |  4 +-
 .../com/navinfo/omqs/db/ImportOMDBHelper.kt   | 42 ++++++---
 .../omqs/http/taskupload/TaskUploadScope.kt   |  8 +-
 .../omqs/ui/activity/map/MainViewModel.kt     | 88 +++++++++++++++++--
 .../com/navinfo/omqs/ui/dialog/TimeDialog.kt  | 32 ++++++-
 .../ui/fragment/console/ConsoleFragment.kt    |  1 +
 .../personalcenter/PersonalCenterFragment.kt  |  7 ++
 .../java/com/navinfo/omqs/util/SignUtil.kt    |  9 ++
 .../main/res/layout/dialog_time_layout.xml    |  6 +-
 .../library/data/dao/impl/INiLocationDao.java |  8 +-
 .../collect/library/enums/DataCodeEnum.kt     |  3 +
 .../map/handler/LocationLayerHandler.kt       | 11 ++-
 13 files changed, 191 insertions(+), 29 deletions(-)

diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json
index 54adecf8..1adbb1ba 100644
--- a/app/src/main/assets/omdb_config.json
+++ b/app/src/main/assets/omdb_config.json
@@ -154,6 +154,7 @@
 				"code": 2201,
 				"name": "桥",
 				"catch":true,
+				"existSubCode": true,
 				"zoomMin": 15,
 				"zoomMax": 20,
 				"transformer": [
diff --git a/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt b/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt
index c04cbea0..ca70d66a 100644
--- a/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt
+++ b/app/src/main/java/com/navinfo/omqs/bean/EvaluationInfo.kt
@@ -53,8 +53,8 @@ data class EvaluationInfo(
     @SerializedName("evaluationWay")
     val evaluationWay: Int = 2,//测评方式 1生产测评 2现场测评 服务字段定义为Integer,使用包装类,对应无值情况为空
 
-    @SerializedName("roadClassfcation")
-    val roadClassfcation: Int = 1,//道路种别
+    @SerializedName("roadClassifcation")
+    val roadClassifcation: Int = 1,//道路种别
 
     @SerializedName("roadFunctionGrade")
     val roadFunctionGrade: Int = 1,//道路功能等级
diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt
index 722435c5..24cc8c0f 100644
--- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt
+++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt
@@ -3,6 +3,7 @@ package com.navinfo.omqs.db
 import android.content.Context
 import android.database.Cursor.*
 import android.os.Build
+import android.provider.ContactsContract.Data
 import android.util.Log
 import androidx.annotation.RequiresApi
 import com.blankj.utilcode.util.FileIOUtils
@@ -234,7 +235,7 @@ class ImportOMDBHelper @AssistedInject constructor(
                                             continue
                                         }
                                         elementIndex += 1
-                                        dataIndex +=1
+                                        dataIndex += 1
                                         Log.d("ImportOMDBHelper", "解析第:${index + 1}行")
                                         val map = gson.fromJson<Map<String, Any>>(
                                             line,
@@ -313,12 +314,13 @@ class ImportOMDBHelper @AssistedInject constructor(
                                         Log.d("ImportOMDBHelper", "解析===2处理name")
                                         Log.d("ImportOMDBHelper", "解析===1处理杆状物")
 
-                                        if(currentConfig.filterData){
+                                        if (currentConfig.filterData) {
                                             when (renderEntity.code.toInt()) {
 
                                                 DataCodeEnum.OMDB_POLE.code.toInt() -> {
                                                     //过滤树类型的杆状物,无需导入到数据库中
-                                                    val poleType = renderEntity.properties["poleType"]
+                                                    val poleType =
+                                                        renderEntity.properties["poleType"]
                                                     if (poleType != null && poleType.toInt() == 2) {
                                                         continue
                                                     }
@@ -346,7 +348,7 @@ class ImportOMDBHelper @AssistedInject constructor(
                                                         renderEntity.properties["boundaryType"]
                                                     if (boundaryType != null) {
                                                         when (boundaryType.toInt()) {
-                                                            0, 1,3,4, 5, 7, 9 -> {
+                                                            0, 1, 3, 4, 5, 7, 9 -> {
                                                                 renderEntity.enable = 0
                                                                 Log.e(
                                                                     "qj",
@@ -380,8 +382,10 @@ class ImportOMDBHelper @AssistedInject constructor(
                                                             "linkOut"
                                                         )
                                                     ) {
-                                                        var linkIn = renderEntity.properties["linkIn"]
-                                                        var linkOut = renderEntity.properties["linkOut"]
+                                                        var linkIn =
+                                                            renderEntity.properties["linkIn"]
+                                                        var linkOut =
+                                                            renderEntity.properties["linkOut"]
                                                         if (linkIn != null && linkOut != null) {
                                                             var checkMsg = "$linkIn$linkOut"
                                                             if (resHashMap.containsKey(checkMsg)) {
@@ -529,7 +533,7 @@ class ImportOMDBHelper @AssistedInject constructor(
                                             Log.d("ImportOMDBHelper", "解析===1子code处理")
                                             //对code编码需要特殊处理 存在多个属性值时,渲染优先级:SA>PA,存在多个属性值时,渲染优先级:FRONTAGE>MAIN_SIDE_A CCESS
 
-                                            if(currentConfig.existSubCode){
+                                            if (currentConfig.existSubCode) {
                                                 when (renderEntity.code.toInt()) {
                                                     DataCodeEnum.OMDB_LINK_ATTRIBUTE.code.toInt() -> {
 
@@ -580,6 +584,17 @@ class ImportOMDBHelper @AssistedInject constructor(
                                                             }
                                                         }
                                                     }
+                                                    //桥
+                                                    DataCodeEnum.OMDB_BRIDGE.code.toInt() -> {
+                                                        when (renderEntity.properties["bridgeType"]) {
+                                                            "1" -> renderEntity.code =
+                                                                DataCodeEnum.OMDB_BRIDGE_1.code
+                                                            "2" -> renderEntity.code =
+                                                                DataCodeEnum.OMDB_BRIDGE_2.code
+//                                                            "3" -> renderEntity.code = DataCodeEnum.OMDB_BRIDGE_3.code
+                                                            else -> DataCodeEnum.OMDB_BRIDGE.code
+                                                        }
+                                                    }
 
                                                     DataCodeEnum.OMDB_RAMP.code.toInt() -> {
                                                         /*匝道*/
@@ -694,7 +709,8 @@ class ImportOMDBHelper @AssistedInject constructor(
 
                                                 if (renderEntity.table == DataCodeEnum.OMDB_NODE_FORM.name) {//特殊处理,因为code相同,使用表名判断
                                                     //过滤不需要渲染的要素
-                                                    var formOfWay = renderEntity.properties["formOfWay"]
+                                                    var formOfWay =
+                                                        renderEntity.properties["formOfWay"]
                                                     if (formOfWay != null && formOfWay.toInt() == 30) {
                                                         renderEntity.enable = 2
                                                         renderEntity.code =
@@ -758,7 +774,7 @@ class ImportOMDBHelper @AssistedInject constructor(
                             )
                             elementIndex = 0
                             tableImportTime = System.currentTimeMillis()
-                            if(insertIndex%20000==0){
+                            if (insertIndex % 20000 == 0) {
                                 Log.d(
                                     "ImportOMDBHelper",
                                     "表解析===结束用时时间===事物开始"
@@ -768,12 +784,16 @@ class ImportOMDBHelper @AssistedInject constructor(
                                 Log.d(
                                     "ImportOMDBHelper",
                                     "表解析===结束用时时间===事物结束"
-                                )                            }
+                                )
+                            }
                         }
                     }
                     Realm.getInstance(currentInstallTaskConfig).commitTransaction()
                     Realm.getInstance(currentInstallTaskConfig).close()
-                    Log.d("ImportOMDBHelper", "表解析===结束用时时间${(System.currentTimeMillis() - dataImportTime)}===$dataIndex===插入$insertIndex")
+                    Log.d(
+                        "ImportOMDBHelper",
+                        "表解析===结束用时时间${(System.currentTimeMillis() - dataImportTime)}===$dataIndex===插入$insertIndex"
+                    )
                     Log.e("qj", "安装结束")
                 } catch (e: Exception) {
                     if (Realm.getInstance(currentInstallTaskConfig).isInTransaction) {
diff --git a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt
index 1a78f24d..4626ea64 100644
--- a/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt
+++ b/app/src/main/java/com/navinfo/omqs/http/taskupload/TaskUploadScope.kt
@@ -173,7 +173,7 @@ class TaskUploadScope(
                         evaluatorName = "",
                         evaluationDate = "",
                         evaluationWay = 2,
-                        roadClassfcation = 1,
+                        roadClassifcation = 1,
                         roadFunctionGrade = 0,
                         noEvaluationreason = hadLinkDvoBean.reason,
                         linkLength = 0.0,
@@ -211,14 +211,14 @@ class TaskUploadScope(
                                 }
                             }
 
-                            var roadClassfcation = 0
+                            var roadClassifcation = 0
 
                             var roadFunctionGrade = 0
 
                             var dataLevel = 0
 
                             if (hadLinkDvoBean.linkInfo != null) {
-                                roadClassfcation = hadLinkDvoBean.linkInfo!!.kind
+                                roadClassifcation = hadLinkDvoBean.linkInfo!!.kind
                                 roadFunctionGrade = hadLinkDvoBean.linkInfo!!.functionLevel
                                 dataLevel = hadLinkDvoBean.linkInfo!!.dataLevel
                             }
@@ -243,7 +243,7 @@ class TaskUploadScope(
                                 evaluatorName = it.checkUserId,
                                 evaluationDate = it.checkTime,
                                 evaluationWay = evaluationWay,
-                                roadClassfcation = roadClassfcation,
+                                roadClassifcation = roadClassifcation,
                                 roadFunctionGrade = roadFunctionGrade,
                                 noEvaluationreason = "",
                                 linkLength = s.toDouble(),
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 fb779647..56f56866 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
@@ -50,6 +50,7 @@ import io.realm.Realm
 import io.realm.RealmConfiguration
 import io.realm.RealmSet
 import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.sync.Mutex
@@ -234,6 +235,9 @@ class MainViewModel @Inject constructor(
 
     private var currentMapZoomLevel: Int = 0
 
+    //导航轨迹回顾
+    private var naviLocationTest = false
+
     //导航信息
     private var naviEngine: NaviEngine? = null
 
@@ -487,10 +491,9 @@ class MainViewModel @Inject constructor(
         if (currentTaskBean != null) {
             var list = mutableListOf<QsRecordBean>()
             val realm = realmOperateHelper.getRealmDefaultInstance()
-            realm.executeTransaction {
-                val objects = realmOperateHelper.getRealmTools(QsRecordBean::class.java).findAll()
-                list = realm.copyFromRealm(objects)
-            }
+            val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
+            val objects = realm.where(QsRecordBean::class.java).equalTo("taskId", id).findAll()
+            list = realm.copyFromRealm(objects)
             realm.close()
             mapController.markerHandle.removeAllQsMarker()
             for (item in list) {
@@ -541,7 +544,11 @@ class MainViewModel @Inject constructor(
             mapController.locationLayerHandler.niLocationFlow.collect { location ->
 
                 //过滤掉无效点
-                if (!GeometryTools.isCheckError(location.longitude, location.latitude)) {
+                if (!naviLocationTest && !GeometryTools.isCheckError(
+                        location.longitude,
+                        location.latitude
+                    )
+                ) {
                     val geometry = GeometryTools.createGeometry(
                         GeoPoint(
                             location.latitude, location.longitude
@@ -698,7 +705,16 @@ class MainViewModel @Inject constructor(
                             DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code, //线限速,
                             DataCodeEnum.OMDB_LINK_DIRECT.code,//道路方向,
                             DataCodeEnum.OMDB_RAMP.code, //匝道
+                            DataCodeEnum.OMDB_RAMP_1.code,
+                            DataCodeEnum.OMDB_RAMP_2.code,
+                            DataCodeEnum.OMDB_RAMP_3.code,
+                            DataCodeEnum.OMDB_RAMP_4.code,
+                            DataCodeEnum.OMDB_RAMP_5.code,
+                            DataCodeEnum.OMDB_RAMP_6.code,
+                            DataCodeEnum.OMDB_RAMP_7.code,
                             DataCodeEnum.OMDB_BRIDGE.code,//桥
+                            DataCodeEnum.OMDB_BRIDGE_1.code,
+                            DataCodeEnum.OMDB_BRIDGE_2.code,
                             DataCodeEnum.OMDB_TUNNEL.code,//隧道
                             DataCodeEnum.OMDB_ROUNDABOUT.code,//环岛
                             DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code,//出入口
@@ -842,7 +858,17 @@ class MainViewModel @Inject constructor(
                                     DataCodeEnum.OMDB_LINK_SPEEDLIMIT_COND.code,//条件线限速
                                     DataCodeEnum.OMDB_LINK_DIRECT.code,//道路方向,
                                     DataCodeEnum.OMDB_RAMP.code, //匝道
+                                    DataCodeEnum.OMDB_RAMP_1.code,
+                                    DataCodeEnum.OMDB_RAMP_2.code,
+                                    DataCodeEnum.OMDB_RAMP_3.code,
+                                    DataCodeEnum.OMDB_RAMP_4.code,
+                                    DataCodeEnum.OMDB_RAMP_5.code,
+                                    DataCodeEnum.OMDB_RAMP_6.code,
+                                    DataCodeEnum.OMDB_RAMP_7.code,
                                     DataCodeEnum.OMDB_BRIDGE.code,//桥
+                                    DataCodeEnum.OMDB_BRIDGE_1.code,//桥
+                                    DataCodeEnum.OMDB_BRIDGE_2.code,//桥
+
                                     DataCodeEnum.OMDB_TUNNEL.code,//隧道
                                     DataCodeEnum.OMDB_ROUNDABOUT.code,//环岛
                                     DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code,//出入口
@@ -1610,5 +1636,57 @@ class MainViewModel @Inject constructor(
     fun clearMarker() {
         mapController.markerHandle.removeMarker()
     }
+
+    /**
+     * 导航测试
+     */
+    fun setNaviLocationTestStartTime(time: Long) {
+        stopNaviLocationTest()
+        viewModelScope.launch(Dispatchers.IO) {
+            var b = true
+            while (b) {
+                val list = traceDataBase.niLocationDao.findListWithStartTime(time, 20)
+                var lastTime: Long = 0
+                for (location in list) {
+                    if(!naviLocationTest)
+                        break
+                    lastTime = if (lastTime != 0L) {
+                        val nowTime = location.timeStamp.toLong()
+                        val tempTime = nowTime - lastTime
+                        if (tempTime > 10000) {
+                            liveDataMessage.postValue("下个定位点与当前定位点时间间隔超过10秒(${tempTime}),将直接跳转到下个点")
+                            delay(5000)
+                        } else {
+                            delay(tempTime)
+                        }
+                        nowTime
+                    } else {
+                        location.timeStamp.toLong()
+                    }
+                    withContext(Dispatchers.Main) {
+                        mapController.animationHandler.animationByLatLon(
+                            location.latitude,
+                            location.longitude
+                        )
+                    }
+
+                    mapController.locationLayerHandler.niLocationFlow.emit(location)
+                }
+                if (list.size < 100) {
+                    b = false
+                }
+            }
+            mapController.locationLayerHandler.startLocation()
+        }
+    }
+
+    /**
+     * 停止测试
+     */
+    fun stopNaviLocationTest() {
+        mapController.locationLayerHandler.startLocation()
+        naviLocationTest = false
+    }
+
 }
 
diff --git a/app/src/main/java/com/navinfo/omqs/ui/dialog/TimeDialog.kt b/app/src/main/java/com/navinfo/omqs/ui/dialog/TimeDialog.kt
index 826367d5..ea953167 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/dialog/TimeDialog.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/dialog/TimeDialog.kt
@@ -2,20 +2,28 @@ package com.navinfo.omqs.ui.dialog
 
 import android.app.Dialog
 import android.content.Context
+import android.os.Build
 import android.os.Bundle
+import android.util.Log
 import android.view.View
 import android.widget.DatePicker
 import android.widget.TextView
 import android.widget.TimePicker
+import androidx.annotation.RequiresApi
 import com.navinfo.omqs.R
+import java.text.SimpleDateFormat
 
 interface OnTimeDialogListener {
+    fun selectTime(milliseconds: Long)
 }
 
-class TimeDialog(context: Context) : Dialog(context), View.OnClickListener {
+class TimeDialog(context: Context, val listener: OnTimeDialogListener) : Dialog(context),
+    View.OnClickListener {
 
     private lateinit var dataPicker: DatePicker
     private lateinit var timePicker: TimePicker
+
+
     private var timeText = ""
     override fun onCreate(savedInstanceState: Bundle?) {
         val customFrame = View.inflate(context, R.layout.dialog_time_layout, null)
@@ -26,10 +34,30 @@ class TimeDialog(context: Context) : Dialog(context), View.OnClickListener {
         setContentView(customFrame)
     }
 
+    @RequiresApi(Build.VERSION_CODES.M)
     override fun onClick(v: View) {
         when (v.id) {
             R.id.time_dialog_ok -> {
-//                dataPicker.
+                val month = if (dataPicker.month > 8) {
+                    "${dataPicker.month + 1}"
+                } else {
+                    "0${dataPicker.month + 1}"
+                }
+                val hour = if(timePicker.hour < 10){
+                    "0${timePicker.hour}"
+                }else{
+                    "${timePicker.hour}"
+                }
+                val minute = if(timePicker.minute<10){
+                    "0${timePicker.minute}"
+                }else{
+                    "${timePicker.minute}"
+                }
+                val time =
+                    "${dataPicker.year}${month}${dataPicker.dayOfMonth}${hour}${minute}00"
+                Log.e("jingo", "选择的时间 $time")
+                val sdf = SimpleDateFormat("yyyyMMddHHmmss")
+                listener.selectTime(sdf.parse(time).time)
                 dismiss()
             }
             R.id.time_dialog_cancel -> {
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt
index 895ee79d..4f585d9b 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/console/ConsoleFragment.kt
@@ -181,6 +181,7 @@ class ConsoleFragment : BaseFragment(), OnClickListener {
          */
         binding.consoleRoot.findViewById<View>(R.id.console_route_bg)?.setOnClickListener(this)
         binding.consoleRoot.findViewById<View>(R.id.console_route_icon_bg)?.setOnClickListener(this)
+
     }
 
     override fun onDestroy() {
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
index 7f47834c..510b2c43 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
@@ -33,6 +33,7 @@ import com.navinfo.omqs.hilt.ImportOMDBHiltFactory
 import com.navinfo.omqs.tools.CoroutineUtils
 import com.navinfo.omqs.ui.activity.map.MainViewModel
 import com.navinfo.omqs.ui.activity.scan.QrCodeActivity
+import com.navinfo.omqs.ui.dialog.OnTimeDialogListener
 import com.navinfo.omqs.ui.dialog.TimeDialog
 import com.navinfo.omqs.ui.fragment.BaseFragment
 import com.permissionx.guolindev.PermissionX
@@ -206,8 +207,14 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
                 }
                 //导航定位测试
                 R.id.personal_center_menu_location_test -> {
+                    viewMainModel.stopNaviLocationTest()
                     val dialog = TimeDialog(
                         requireContext(),
+                        object : OnTimeDialogListener {
+                            override fun selectTime(milliseconds: Long) {
+                                viewMainModel.setNaviLocationTestStartTime(milliseconds)
+                            }
+                        }
                     )
                     dialog.show()
                 }
diff --git a/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt b/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt
index 4d45c49b..14f84764 100644
--- a/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt
+++ b/app/src/main/java/com/navinfo/omqs/util/SignUtil.kt
@@ -85,6 +85,13 @@ class SignUtil {
                     if (data.properties["conAccess"] === "1") "全封闭" else ""
                 }
                 //匝道
+                DataCodeEnum.OMDB_RAMP_1.code,
+                DataCodeEnum.OMDB_RAMP_2.code,
+                DataCodeEnum.OMDB_RAMP_3.code,
+                DataCodeEnum.OMDB_RAMP_4.code,
+                DataCodeEnum.OMDB_RAMP_5.code,
+                DataCodeEnum.OMDB_RAMP_6.code,
+                DataCodeEnum.OMDB_RAMP_7.code,
                 DataCodeEnum.OMDB_RAMP.code -> {
                     when (data.properties["formOfWay"]) {
                         "93" -> "普通匝"
@@ -110,6 +117,8 @@ class SignUtil {
                     if (data.properties["multiDigitized"] == "1") "上下线" else " "
                 }
                 //桥
+                DataCodeEnum.OMDB_BRIDGE_1.code,//桥
+                DataCodeEnum.OMDB_BRIDGE_2.code,//桥
                 DataCodeEnum.OMDB_BRIDGE.code -> {
                     when (data.properties["bridgeType"]) {
                         "1" -> return "固定桥"
diff --git a/app/src/main/res/layout/dialog_time_layout.xml b/app/src/main/res/layout/dialog_time_layout.xml
index 96eebb57..167d3c3e 100644
--- a/app/src/main/res/layout/dialog_time_layout.xml
+++ b/app/src/main/res/layout/dialog_time_layout.xml
@@ -5,7 +5,8 @@
     android:layout_height="wrap_content"
     android:background="@color/white"
     android:gravity="center"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    tools:context="com.navinfo.omqs.ui.dialog.TimeDialog">
 
     <TextView
         android:layout_width="wrap_content"
@@ -53,12 +54,13 @@
             android:padding="5dp"
             android:layout_weight="1"
             android:gravity="center"
+            android:textColor="@color/red"
             android:text="取消"
             android:textSize="18sp" />
 
         <View
             android:layout_width="1dp"
-            android:layout_height="20dp"
+            android:layout_height="match_parent"
             android:background="@color/gray"
             android:gravity="center"
              />
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/INiLocationDao.java b/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/INiLocationDao.java
index c4fa6f57..b841fb75 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/INiLocationDao.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/INiLocationDao.java
@@ -9,6 +9,7 @@ import androidx.room.Update;
 
 import com.navinfo.collect.library.data.entity.Element;
 import com.navinfo.collect.library.data.entity.NiLocation;
+
 import java.util.List;
 import java.util.Set;
 
@@ -42,13 +43,16 @@ public interface INiLocationDao {
     List<NiLocation> findList(int minx, int maxx, int miny, int maxy);
 
     @Query("SELECT * FROM niLocation where tilex>=:minx and tilex<=:maxx and tiley>=:miny and tiley <=:maxy and time>=:startTime and time<=:endTime")
-    List<NiLocation> timeTofindList(int minx, int maxx, int miny, int maxy,long startTime,long endTime);
+    List<NiLocation> timeTofindList(int minx, int maxx, int miny, int maxy, long startTime, long endTime);
 
     @Query("SELECT * FROM niLocation")
     List<NiLocation> findAll();
 
     @Query("SELECT * FROM niLocation where  time>=:startTime and time<=:endTime and taskId=:taskId")
-    List<NiLocation> taskIdAndTimeTofindList(String taskId,long startTime,long endTime);
+    List<NiLocation> taskIdAndTimeTofindList(String taskId, long startTime, long endTime);
+
+    @Query("SELECT * FROM niLocation where time>=:startTime limit:limit")
+    List<NiLocation> findListWithStartTime(long startTime, int limit);
 
     @Query("SELECT * FROM niLocation where taskId =:taskId")
     List<NiLocation> findToTaskIdAll(String taskId);
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt
index 3a3b4f1d..0cdad7bc 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt
+++ b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt
@@ -37,6 +37,9 @@ enum class DataCodeEnum(var tableName: String, var code: String) {
     OMDB_RDBOUND_BOUNDARYTYPE("道路边界类型", "2083"),
     OMDB_LANE_CONSTRUCTION("车道施工", "2090"),
     OMDB_BRIDGE("桥", "2201"),
+    OMDB_BRIDGE_1("固定桥", "2201-1"),
+    OMDB_BRIDGE_2("可移动桥", "2201-2"),
+    OMDB_BRIDGE_3("跨线天桥", "2201-2"),
     OMDB_TUNNEL("隧道", "2202"),
     OMDB_ROUNDABOUT("环岛", "2204"),
     OMDB_LINK_FORM1("道路形态1", "2205"),
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt
index 20053a00..a44d100f 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LocationLayerHandler.kt
@@ -26,6 +26,11 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
     private var bFirst = true
     private val mLocationLayer: LocationLayer = LocationLayer(mMapView.vtmMap)
     private lateinit var locationClient: LocationClient
+
+    /**
+     * 定位测试
+     */
+    private var naviLocationTest = false
 //    private var niLocationListener: NiLocationListener by lazy{
 //
 //    }
@@ -64,6 +69,10 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
                 //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
 //                val coorType = it.coorType
                 //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
+                //定位测试开始,后续不再处理
+                if (naviLocationTest)
+                    return@MyLocationListener
+
                 val errorCode = it.locType
                 mCurrentLocation = it
                 mLocationLayer.setPosition(it.latitude, it.longitude, it.radius)
@@ -215,7 +224,7 @@ private class MyLocationListener(callback: (BDLocation) -> Unit) : BDAbstractLoc
     val call = callback;
     override fun onReceiveLocation(location: BDLocation) {
         call(location)
-        Log.e("jingo", "定位结果:速度=" + location.speed +" 方向=" + location.direction)
+        Log.e("jingo", "定位结果:速度=" + location.speed + " 方向=" + location.direction)
     }
 }
 

From 06993b6a22ca45631ee1df99ff892fc6ae56d34c Mon Sep 17 00:00:00 2001
From: squallzhjch <zhangjingchao@navinfo.com>
Date: Fri, 13 Oct 2023 17:33:53 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BD=A8=E8=BF=B9?=
 =?UTF-8?q?=E5=9B=9E=E6=94=BE=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../http/taskdownload/TaskDownloadScope.kt    |  3 +-
 .../omqs/ui/activity/map/MainViewModel.kt     | 37 ++++++++++---------
 .../ui/fragment/tasklist/TaskListAdapter.kt   |  2 -
 .../java/com/navinfo/omqs/util/NaviEngine.kt  |  2 +-
 4 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt
index 05e5d01d..38cf4f82 100644
--- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt
+++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt
@@ -110,13 +110,14 @@ class TaskDownloadScope(
             downloadData.postValue(taskBean)
             if (status != FileDownloadStatus.LOADING && status != FileDownloadStatus.IMPORTING) {
                 val realm = realmOperateHelper.getRealmDefaultInstance()
-                Log.e("jingo", "数据下载更新状态 任务link数量:${taskBean.hadLinkDvoList.size}")
+//                Log.e("jingo", "数据下载更新状态 原${}")
                 realm.executeTransaction { r ->
 //                    realm.insertOrUpdate(taskBean)
                     val newTask =
                         realm.where(TaskBean::class.java).equalTo("id", taskBean.id).findFirst()
                     newTask?.let {
                         it.syncStatus = taskBean.syncStatus
+                        it.status = taskBean.status
                         it.errMsg = taskBean.errMsg
                         //赋值时间,用于查询过滤
                         it.operationTime = taskBean.operationTime
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 56f56866..36be0428 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
@@ -49,12 +49,9 @@ import dagger.hilt.android.lifecycle.HiltViewModel
 import io.realm.Realm
 import io.realm.RealmConfiguration
 import io.realm.RealmSet
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
+import kotlinx.coroutines.*
 import kotlinx.coroutines.flow.collectLatest
-import kotlinx.coroutines.launch
 import kotlinx.coroutines.sync.Mutex
-import kotlinx.coroutines.withContext
 import org.locationtech.jts.geom.Geometry
 import org.oscim.core.GeoPoint
 import org.oscim.core.MapPosition
@@ -237,6 +234,7 @@ class MainViewModel @Inject constructor(
 
     //导航轨迹回顾
     private var naviLocationTest = false
+    private var naviLocationTestJob: Job? = null
 
     //导航信息
     private var naviEngine: NaviEngine? = null
@@ -1641,17 +1639,22 @@ class MainViewModel @Inject constructor(
      * 导航测试
      */
     fun setNaviLocationTestStartTime(time: Long) {
-        stopNaviLocationTest()
-        viewModelScope.launch(Dispatchers.IO) {
+        naviLocationTest = true
+        if (naviLocationTestJob != null && naviLocationTestJob!!.isActive)
+            naviLocationTestJob!!.cancel()
+        naviLocationTestJob = viewModelScope.launch(Dispatchers.IO) {
             var b = true
+            val limitCount = 20
+            var lastTime: Long = time
             while (b) {
-                val list = traceDataBase.niLocationDao.findListWithStartTime(time, 20)
-                var lastTime: Long = 0
+                Log.e("jingo", "下一组定位点起始时间 $lastTime")
+                val list = traceDataBase.niLocationDao.findListWithStartTime(lastTime, limitCount)
+
                 for (location in list) {
-                    if(!naviLocationTest)
+                    if (!naviLocationTest)
                         break
-                    lastTime = if (lastTime != 0L) {
-                        val nowTime = location.timeStamp.toLong()
+                    val nowTime = location.timeStamp.toLong()
+                    if (lastTime != 0L) {
                         val tempTime = nowTime - lastTime
                         if (tempTime > 10000) {
                             liveDataMessage.postValue("下个定位点与当前定位点时间间隔超过10秒(${tempTime}),将直接跳转到下个点")
@@ -1659,10 +1662,9 @@ class MainViewModel @Inject constructor(
                         } else {
                             delay(tempTime)
                         }
-                        nowTime
-                    } else {
-                        location.timeStamp.toLong()
                     }
+                    lastTime = nowTime
+
                     withContext(Dispatchers.Main) {
                         mapController.animationHandler.animationByLatLon(
                             location.latitude,
@@ -1672,11 +1674,10 @@ class MainViewModel @Inject constructor(
 
                     mapController.locationLayerHandler.niLocationFlow.emit(location)
                 }
-                if (list.size < 100) {
+                if (list.size < limitCount) {
                     b = false
                 }
             }
-            mapController.locationLayerHandler.startLocation()
         }
     }
 
@@ -1684,8 +1685,10 @@ class MainViewModel @Inject constructor(
      * 停止测试
      */
     fun stopNaviLocationTest() {
-        mapController.locationLayerHandler.startLocation()
         naviLocationTest = false
+        if (naviLocationTestJob != null) {
+            naviLocationTestJob!!.cancel()
+        }
     }
 
 }
diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt
index e94c23c8..5a8e1e91 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt
@@ -227,7 +227,6 @@ class TaskListAdapter(
                 binding.taskUploadBtn.isEnabled = false
                 binding.taskUploadBtn.setProgress(0)
                 binding.taskUploadBtn.setBackgroundColor(binding.root.resources.getColor(R.color.gray_121))
-                Log.e("qj","${taskBean.id}===changeUploadTxtViews===已上传")
             }
 
             FileUploadStatus.ERROR -> {
@@ -242,7 +241,6 @@ class TaskListAdapter(
             FileUploadStatus.NONE -> {
                 binding.taskUploadBtn.setText("未上传")
                 binding.taskUploadBtn.setProgress(0)
-                Log.e("qj","${taskBean.id}===changeUploadTxtViews===未上传")
             }
 
             FileUploadStatus.WAITING -> {
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 de61b5c0..d2613b24 100644
--- a/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt
+++ b/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt
@@ -527,7 +527,7 @@ class NaviEngine(
     private suspend fun matchingItem() {
 
         if (routeIndex > -1 && tempRoutList.isNotEmpty() && tempGeometry != null) {
-            Log.e("jingo", "当前${routeIndex} ${tempRoutList[0].startIndexInPath} $footIndex")
+//            Log.e("jingo", "当前${routeIndex} ${tempRoutList[0].startIndexInPath} $footIndex")
             //道路前方一定距离范围内的要素信息
             val bindingItemList = mutableListOf<NaviRouteItem>()
             //定位点到要素的路径距离

From 7c5a1763fe36b50d8ef678d81b6d8dde8a8ff2ee Mon Sep 17 00:00:00 2001
From: squallzhjch <zhangjingchao@navinfo.com>
Date: Fri, 13 Oct 2023 17:34:02 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BD=A8=E8=BF=B9?=
 =?UTF-8?q?=E5=9B=9E=E6=94=BE=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../navinfo/collect/library/data/dao/impl/INiLocationDao.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/INiLocationDao.java b/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/INiLocationDao.java
index b841fb75..e04b18c4 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/INiLocationDao.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/data/dao/impl/INiLocationDao.java
@@ -51,7 +51,7 @@ public interface INiLocationDao {
     @Query("SELECT * FROM niLocation where  time>=:startTime and time<=:endTime and taskId=:taskId")
     List<NiLocation> taskIdAndTimeTofindList(String taskId, long startTime, long endTime);
 
-    @Query("SELECT * FROM niLocation where time>=:startTime limit:limit")
+    @Query("SELECT * FROM niLocation where timeStamp>:startTime  limit:limit ")
     List<NiLocation> findListWithStartTime(long startTime, int limit);
 
     @Query("SELECT * FROM niLocation where taskId =:taskId")

From ab873e86afc9cdc11b8cc17496ca27d6e27d8731 Mon Sep 17 00:00:00 2001
From: xiaoyan <xiaoyan159@163.com>
Date: Fri, 13 Oct 2023 17:39:53 +0800
Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B918=E7=BA=A7overzoo?=
 =?UTF-8?q?m=E6=A8=A1=E5=BC=8F=EF=BC=8C=E8=A7=A3=E5=86=B3=E9=83=A8?=
 =?UTF-8?q?=E5=88=86=E6=83=85=E5=86=B5=E4=B8=8B=E6=B8=B2=E6=9F=93=E5=87=BA?=
 =?UTF-8?q?=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ui/fragment/personalcenter/PersonalCenterFragment.kt    | 2 +-
 .../collect/library/map/source/OMDBReferenceTileSource.java | 6 ++----
 .../collect/library/map/source/OMDBTileDataSource.java      | 4 ++--
 .../navinfo/collect/library/map/source/OMDBTileSource.java  | 5 ++---
 vtm                                                         | 2 +-
 5 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
index 64bcc9d6..dae68bc1 100644
--- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
+++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt
@@ -178,7 +178,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
                     // 定位到指定位置
                     niMapController.mMapView.vtmMap.animator()
 //                        .animateTo(GeoPoint( 40.05108004733645, 116.29187746293708    ))
-                        .animateTo(GeoPoint(40.07245537956604, 116.239638575623))
+                        .animateTo(GeoPoint(40.0882756, 116.3033581))
                 }
 
                 R.id.personal_center_menu_open_all_layer -> {
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java
index 5f8b17c4..55001b7b 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBReferenceTileSource.java
@@ -1,10 +1,7 @@
 package com.navinfo.collect.library.map.source;
 
-import com.navinfo.collect.library.system.Constant;
-
 import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSource;
-import org.oscim.tiling.OverzoomTileDataSource;
 
 public class OMDBReferenceTileSource extends RealmDBTileSource {
     private OMDBReferenceDataSource omdbReferenceTileSource;
@@ -18,7 +15,8 @@ public class OMDBReferenceTileSource extends RealmDBTileSource {
     @Override
     public ITileDataSource getDataSource() {
         //return new OverzoomTileDataSource(new OMDBReferenceDataSource(), Constant.OVER_ZOOM);
-        return new OverzoomTileDataSource(omdbReferenceTileSource, Constant.OVER_ZOOM);
+//        return new OverzoomTileDataSource(omdbReferenceTileSource, Constant.OVER_ZOOM);
+        return omdbReferenceTileSource;
     }
 
     @Override
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java
index c6e5be22..9bc939e7 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java
@@ -81,8 +81,8 @@ public class OMDBTileDataSource implements ITileDataSource {
             // 数据记录的tile号是以正外接tile号列表,此处过滤并未与当前tile相交的数据
             if (!listResult.isEmpty()) {
                 Polygon tilePolygon = GeometryTools.getTilePolygon(tile);
-                System.out.println("第一条数据的最小x值:" + listResult.get(0).getTileX().stream().min(Integer::compare).get());
-                System.out.println("当前tile的:" + listResult.get(0).getTileX().stream().min(Integer::compare).get());
+//                System.out.println("第一条数据的最小x值:" + listResult.get(0).getTileX().stream().min(Integer::compare).get());
+//                System.out.println("当前tile的:" + listResult.get(0).getTileX().stream().min(Integer::compare).get());
                 listResult = listResult.stream().filter((RenderEntity renderEntity) -> renderEntity.getWkt().intersects(tilePolygon))
                         /*过滤数据,只有最小x(屏幕的最小x或数据的最小x会被渲染,跨Tile的其他数据不再重复渲染)*/
 //                        .filter((RenderEntity renderEntity) -> MercatorProjection.longitudeToTileX(viewport.fromScreenPoint(0,0).getLongitude(), (byte) Constant.DATA_ZOOM) == currentTileX || renderEntity.getTileX().stream().min(Integer::compare).get() == currentTileX)
diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java
index 9cda466c..ab35f515 100644
--- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java
+++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileSource.java
@@ -3,11 +3,9 @@ package com.navinfo.collect.library.map.source;
 import android.util.Log;
 
 import com.navinfo.collect.library.data.entity.RenderEntity;
-import com.navinfo.collect.library.system.Constant;
 
 import org.oscim.map.Viewport;
 import org.oscim.tiling.ITileDataSource;
-import org.oscim.tiling.OverzoomTileDataSource;
 
 import io.realm.Realm;
 
@@ -23,7 +21,8 @@ public class OMDBTileSource extends RealmDBTileSource {
     @Override
     public ITileDataSource getDataSource() {
        // return new OverzoomTileDataSource(new OMDBTileDataSource(), Constant.OVER_ZOOM);
-        return new OverzoomTileDataSource(omdbTileDataSource, Constant.OVER_ZOOM);
+//        return new OverzoomTileDataSource(omdbTileDataSource, Constant.OVER_ZOOM);
+        return omdbTileDataSource;
     }
 
     @Override
diff --git a/vtm b/vtm
index 50f7b028..6a6bb9ab 160000
--- a/vtm
+++ b/vtm
@@ -1 +1 @@
-Subproject commit 50f7b028e7f3934a8c330ea8a54046d7d368682d
+Subproject commit 6a6bb9ab5eaf6bb4c05b3110c612c32ef4c6ef3d