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