merge code

This commit is contained in:
qiji4215 2023-07-14 10:54:02 +08:00
parent 7ebdfc93ff
commit 108c6daa2f
5 changed files with 180 additions and 128 deletions

View File

@ -220,6 +220,12 @@ class MainActivity : BaseActivity() {
}
}
}
//捕捉列表变化回调
viewModel.liveDataNILocationList.observe(this) {
Toast.makeText(this,"轨迹被点击了",Toast.LENGTH_LONG).show()
}
//右上角菜单是否被点击
viewModel.liveDataMenuState.observe(this) {
binding.mainActivityMenu.isSelected = it

View File

@ -3,6 +3,7 @@ package com.navinfo.omqs.ui.activity.map
import android.app.Activity
import android.content.Context
import android.content.DialogInterface
import android.content.SharedPreferences
import android.graphics.drawable.AnimationDrawable
import android.graphics.drawable.BitmapDrawable
import android.os.Build
@ -15,13 +16,13 @@ import android.view.ViewGroup
import android.widget.ImageView
import android.widget.PopupWindow
import androidx.annotation.RequiresApi
import androidx.constraintlayout.widget.Group
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.navigation.findNavController
import com.blankj.utilcode.util.ToastUtils
import com.navinfo.collect.library.data.dao.impl.TraceDataBase
import com.navinfo.collect.library.data.entity.NiLocation
import com.navinfo.collect.library.data.entity.RenderEntity
import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.collect.library.map.NIMapController
@ -31,7 +32,6 @@ import com.navinfo.collect.library.utils.GeometryToolsKt
import com.navinfo.omqs.Constant
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.bean.RoadNameBean
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.ui.dialog.CommonDialog
@ -59,11 +59,13 @@ import javax.inject.Inject
* 创建Activity全局viewmode
*/
@RequiresApi(Build.VERSION_CODES.M)
@HiltViewModel
class MainViewModel @Inject constructor(
private val mapController: NIMapController,
private val traceDataBase: TraceDataBase,
private val realmOperateHelper: RealmOperateHelper,
private val sharedPreferences: SharedPreferences,
) : ViewModel() {
private var mCameraDialog: CommonDialog? = null
@ -74,6 +76,9 @@ class MainViewModel @Inject constructor(
//地图点击捕捉到的标签ID列表
val liveDataNoteIdList = MutableLiveData<List<String>>()
//地图点击捕捉到的轨迹列表
val liveDataNILocationList = MutableLiveData<List<NiLocation>>()
//左侧看板数据
val liveDataSignList = MutableLiveData<List<SignBean>>()
@ -117,6 +122,8 @@ class MainViewModel @Inject constructor(
private var linkIdCache = ""
private var lastNiLocaion: NiLocation? = null
init {
mapController.mMapView.vtmMap.events.bind(Map.UpdateListener { e, mapPosition ->
when (e) {
@ -135,6 +142,10 @@ class MainViewModel @Inject constructor(
override fun onNoteList(list: MutableList<String>) {
liveDataNoteIdList.value = list
}
override fun onNiLocationList(list: MutableList<NiLocation>) {
liveDataNILocationList.value = list
}
})
initLocation()
//处理地图点击操作
@ -154,8 +165,8 @@ class MainViewModel @Inject constructor(
/**
* 初始话任务高亮高亮
*/
@RequiresApi(Build.VERSION_CODES.M)
private fun initTaskData() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
viewModelScope.launch {
val realm = Realm.getDefaultInstance()
val results = realm.where(TaskBean::class.java).findAll()
@ -169,14 +180,11 @@ class MainViewModel @Inject constructor(
}
mapController.lineHandler.omdbTaskLinkLayer.removeAll()
for (item in list) {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// mapController.lineHandler.omdbTaskLinkLayer.setLineColor(Color.valueOf(item.color))
// }
mapController.lineHandler.omdbTaskLinkLayer.addLineList(item.hadLinkDvoList)
}
}
// realm.close()
}
}
private fun initLocation() {
@ -206,8 +214,27 @@ class MainViewModel @Inject constructor(
} catch (e: Exception) {
}
val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
location.taskId = id.toString()
//增加间距判断
if (lastNiLocaion != null) {
val disance = GeometryTools.distanceToDouble(
GeoPoint(location.latitude, location.longitude), GeoPoint(
lastNiLocaion!!.latitude, lastNiLocaion!!.longitude
)
)
//相距差距大于0.5米以上进行存储
if (disance > 0.5) {
traceDataBase.niLocationDao.insert(location)
mapController.mMapView.vtmMap.updateMap(true)
mapController.markerHandle.addNiLocationMarkerItem(location)
}
} else {
traceDataBase.niLocationDao.insert(location)
mapController.markerHandle.addNiLocationMarkerItem(location)
}
lastNiLocaion = location
//mapController.mMapView.vtmMap.updateMap(true)
}
}
//用于定位点捕捉道路
@ -217,6 +244,18 @@ class MainViewModel @Inject constructor(
}
}
//加载轨迹数据
viewModelScope.launch(Dispatchers.IO) {
val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
val list: List<NiLocation>? = TraceDataBase.getDatabase(
mapController.mMapView.context,
Constant.USER_DATA_PATH
).niLocationDao.findToTaskIdAll(id.toString())
list!!.forEach {
mapController.markerHandle.addNiLocationMarkerItem(it)
}
}
//显示轨迹图层
mapController.layerManagerHandler.showNiLocationLayer()
@ -225,8 +264,9 @@ class MainViewModel @Inject constructor(
/**
* 捕获道路和面板
*/
@RequiresApi(Build.VERSION_CODES.N)
private suspend fun captureLink(point: GeoPoint) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val linkList = realmOperateHelper.queryLink(
point = point,
)
@ -275,6 +315,7 @@ class MainViewModel @Inject constructor(
2041, 2008, 2002, 2019, 2010 -> topSignList.add(
signBean
)
4002, 4003, 4004, 4010, 4022, 4601 -> signList.add(
signBean
)
@ -320,7 +361,7 @@ class MainViewModel @Inject constructor(
if (!hisRoadName) {
liveDataRoadName.postValue(null)
}
}
}
/**

View File

@ -10,7 +10,9 @@ import androidx.annotation.RequiresApi
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.navinfo.collect.library.data.dao.impl.TraceDataBase
import com.navinfo.collect.library.data.entity.HadLinkDvoBean
import com.navinfo.collect.library.data.entity.NiLocation
import com.navinfo.collect.library.data.entity.QsRecordBean
import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.collect.library.map.NIMapController
@ -164,6 +166,8 @@ class TaskViewModel @Inject constructor(
liveDataTaskLinks.value = taskBean.hadLinkDvoList
mapController.lineHandler.omdbTaskLinkLayer.removeAll()
mapController.markerHandle.clearNiLocationLayer()
if (taskBean.hadLinkDvoList.isNotEmpty()) {
mapController.lineHandler.omdbTaskLinkLayer.addLineList(taskBean.hadLinkDvoList)
var maxX = 0.0
@ -195,6 +199,17 @@ class TaskViewModel @Inject constructor(
)
}
}
//重新加载轨迹
viewModelScope.launch(Dispatchers.IO) {
val list: List<NiLocation>? = TraceDataBase.getDatabase(
mapController.mMapView.context,
Constant.USER_DATA_PATH
).niLocationDao.findToTaskIdAll(taskBean.id.toString())
list!!.forEach {
mapController.markerHandle.addNiLocationMarkerItem(it)
}
}
}
/**

View File

@ -46,4 +46,7 @@ public interface INiLocationDao {
@Query("SELECT * FROM niLocation")
List<NiLocation> findAll();
@Query("SELECT * FROM niLocation where taskId =:taskId")
List<NiLocation> findToTaskIdAll(String taskId);
}

View File

@ -1,6 +1,7 @@
package com.navinfo.collect.library.map.handler
import android.content.Context
import android.content.SharedPreferences
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Color
@ -8,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.res.ResourcesCompat
import androidx.lifecycle.lifecycleScope
import com.navinfo.collect.library.R
import com.navinfo.collect.library.data.dao.impl.TraceDataBase
import com.navinfo.collect.library.data.entity.NiLocation
import com.navinfo.collect.library.data.entity.NoteBean
import com.navinfo.collect.library.data.entity.QsRecordBean
@ -235,7 +237,6 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
}
}
/**
* 增加或更新marker
*/
@ -449,17 +450,17 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
nearest: Int
): Boolean {
itemListener?.let {
val idList = mutableListOf<String>()
val idList = mutableListOf<NiLocation>()
if (list.size == 0) {
} else {
for (i in list) {
val markerInterface: MarkerInterface =
itemizedLayer.itemList[i]
niLocationItemizedLayer.itemList[i]
if (markerInterface is MarkerItem) {
idList.add(markerInterface.title)
idList.add(markerInterface.uid as NiLocation)
}
}
it.onQsRecordList(idList.distinct().toMutableList())
it.onNiLocationList(idList.distinct().toMutableList())
}
}
return true
@ -473,11 +474,6 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
}
})
addLayer(niLocationItemizedLayer, NIMapView.LAYER_GROUPS.OPERATE_MARKER)
mContext.lifecycleScope.launch(Dispatchers.IO) {
var list = mutableListOf<QsRecordBean>()
}
}
/**
@ -544,8 +540,8 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
/**
* 添加质检数据marker
*/
private suspend fun addNiLocationMarkerItem(niLocation: NiLocation) {
val item = MarkerItem(niLocation.id, "", GeoPoint(niLocation.latitude, niLocation.longitude))
public suspend fun addNiLocationMarkerItem(niLocation: NiLocation) {
val item = MarkerItem(niLocation, niLocation.id, "", GeoPoint(niLocation.latitude, niLocation.longitude))
var itemizedLayer: ItemizedLayer? = null
val direction: Double = niLocation.direction
//角度
@ -800,21 +796,11 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
}
/**
* 添加质检数据marker
* 移除轨迹图层
*/
private suspend fun createTrackMarkerItem(item: NiLocation) {
for (item in itemizedLayer.itemList) {
if (item is MarkerItem) {
if (item.title == item.uid) {
itemizedLayer.itemList.remove(item)
break
}
}
}
//createMarkerItem(data)
withContext(Dispatchers.Main) {
mMapView.updateMap(true)
}
fun clearNiLocationLayer() {
niLocationItemizedLayer.removeAllItems()
niLocationItemizedLayer.update()
}
}
@ -822,4 +808,5 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
interface OnQsRecordItemClickListener {
fun onQsRecordList(list: MutableList<String>)
fun onNoteList(list: MutableList<String>)
fun onNiLocationList(list: MutableList<NiLocation>)
}