修改地图卡顿

修改新增link线型编辑
This commit is contained in:
squallzhjch 2023-07-18 10:49:56 +08:00
parent e3695fb6cb
commit 45e3e3ca0d
14 changed files with 298 additions and 95 deletions

View File

@ -223,9 +223,18 @@ class MainActivity : BaseActivity() {
} }
} }
viewModel.liveDataTaskLink.observe(this) {
val bundle = Bundle()
bundle.putString("TaskLinkId", it)
findNavController(R.id.main_activity_right_fragment).navigate(
R.id.TaskLinkFragment,
bundle
)
}
//捕捉列表变化回调 //捕捉列表变化回调
viewModel.liveDataNILocationList.observe(this) { viewModel.liveDataNILocationList.observe(this) {
Toast.makeText(this,"轨迹被点击了",Toast.LENGTH_LONG).show() Toast.makeText(this, "轨迹被点击了", Toast.LENGTH_LONG).show()
} }
//右上角菜单是否被点击 //右上角菜单是否被点击
@ -545,7 +554,12 @@ class MainActivity : BaseActivity() {
mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 128, 65) mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 128, 65)
} }
mapController.mMapView.vtmMap.animator() mapController.mMapView.vtmMap.animator()
.animateTo(GeoPoint( mapController.mMapView.vtmMap.mapPosition.geoPoint.latitude,mapController.mMapView.vtmMap.mapPosition.geoPoint.longitude)) .animateTo(
GeoPoint(
mapController.mMapView.vtmMap.mapPosition.geoPoint.latitude,
mapController.mMapView.vtmMap.mapPosition.geoPoint.longitude
)
)
} }
@RequiresApi(Build.VERSION_CODES.M) @RequiresApi(Build.VERSION_CODES.M)

View File

@ -23,13 +23,10 @@ import androidx.lifecycle.viewModelScope
import androidx.navigation.findNavController import androidx.navigation.findNavController
import com.blankj.utilcode.util.ToastUtils import com.blankj.utilcode.util.ToastUtils
import com.navinfo.collect.library.data.dao.impl.TraceDataBase import com.navinfo.collect.library.data.dao.impl.TraceDataBase
import com.navinfo.collect.library.data.entity.NiLocation import com.navinfo.collect.library.data.entity.*
import com.navinfo.collect.library.data.entity.NoteBean
import com.navinfo.collect.library.data.entity.QsRecordBean
import com.navinfo.collect.library.data.entity.RenderEntity
import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener
import com.navinfo.collect.library.map.handler.OnTaskLinkItemClickListener
import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.collect.library.utils.GeometryToolsKt import com.navinfo.collect.library.utils.GeometryToolsKt
import com.navinfo.omqs.Constant import com.navinfo.omqs.Constant
@ -91,6 +88,9 @@ class MainViewModel @Inject constructor(
//道路名 //道路名
val liveDataRoadName = MutableLiveData<RenderEntity?>() val liveDataRoadName = MutableLiveData<RenderEntity?>()
//捕捉到新增的link
val liveDataTaskLink = MutableLiveData<String>()
/** /**
* 当前选中的要展示的详细信息的要素 * 当前选中的要展示的详细信息的要素
*/ */
@ -150,6 +150,12 @@ class MainViewModel @Inject constructor(
liveDataNILocationList.value = list liveDataNILocationList.value = list
} }
}) })
mapController.lineHandler.setOnTaskLinkItemClickListener(object :
OnTaskLinkItemClickListener {
override fun onTaskLink(taskLinkId: String) {
liveDataTaskLink.value = taskLinkId
}
})
initLocation() initLocation()
@ -159,7 +165,9 @@ class MainViewModel @Inject constructor(
// testPoint = it // testPoint = it
//线选择状态 //线选择状态
if (bSelectRoad) { if (bSelectRoad) {
captureLink(it) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
captureLink(it)
}
} else { } else {
captureItem(it) captureItem(it)
} }
@ -169,7 +177,7 @@ class MainViewModel @Inject constructor(
initTaskData() initTaskData()
initQsRecordData() initQsRecordData()
initNoteData() initNoteData()
initNILocationData() // initNILocationData()
} }
} }
@ -227,8 +235,10 @@ class MainViewModel @Inject constructor(
mapController.mMapView.context, mapController.mMapView.context,
Constant.USER_DATA_PATH Constant.USER_DATA_PATH
).niLocationDao.findToTaskIdAll(id.toString()) ).niLocationDao.findToTaskIdAll(id.toString())
list!!.forEach { if (list != null) {
mapController.markerHandle.addNiLocationMarkerItem(it) for (location in list) {
mapController.markerHandle.addNiLocationMarkerItem(location)
}
} }
} }
@ -238,6 +248,17 @@ class MainViewModel @Inject constructor(
private fun initLocation() { private fun initLocation() {
//用于定位点存储到数据库 //用于定位点存储到数据库
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
//用于定位点捕捉道路
mapController.locationLayerHandler.niLocationFlow.collectLatest { location ->
if (!isSelectRoad()) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
captureLink(
GeoPoint(
location.latitude,
location.longitude
)
)
}
}
mapController.locationLayerHandler.niLocationFlow.collect { location -> mapController.locationLayerHandler.niLocationFlow.collect { location ->
val geometry = GeometryTools.createGeometry( val geometry = GeometryTools.createGeometry(
GeoPoint( GeoPoint(
@ -285,17 +306,6 @@ class MainViewModel @Inject constructor(
//mapController.mMapView.vtmMap.updateMap(true) //mapController.mMapView.vtmMap.updateMap(true)
} }
} }
//用于定位点捕捉道路
viewModelScope.launch(Dispatchers.Default) {
mapController.locationLayerHandler.niLocationFlow.collectLatest { location ->
if (!isSelectRoad()) captureLink(
GeoPoint(
location.latitude,
location.longitude
)
)
}
}
//显示轨迹图层 //显示轨迹图层
mapController.layerManagerHandler.showNiLocationLayer() mapController.layerManagerHandler.showNiLocationLayer()
@ -312,6 +322,7 @@ class MainViewModel @Inject constructor(
/** /**
* 捕获道路和面板 * 捕获道路和面板
*/ */
@RequiresApi(Build.VERSION_CODES.N)
private suspend fun captureLink(point: GeoPoint) { private suspend fun captureLink(point: GeoPoint) {
val linkList = realmOperateHelper.queryLink( val linkList = realmOperateHelper.queryLink(

View File

@ -39,6 +39,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
import io.realm.RealmList import io.realm.RealmList
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
import java.io.File import java.io.File
@ -109,7 +110,7 @@ class EvaluationResultViewModel @Inject constructor(
init { init {
liveDataQsRecordBean.value = QsRecordBean(id = UUID.randomUUID().toString()) liveDataQsRecordBean.value = QsRecordBean(id = UUID.randomUUID().toString())
viewModelScope.launch { viewModelScope.launch {
mapController.onMapClickFlow.collect { mapController.onMapClickFlow.collectLatest {
liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText() liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText()
mapController.markerHandle.addMarker(it, markerTitle) mapController.markerHandle.addMarker(it, markerTitle)
viewModelScope.launch { viewModelScope.launch {

View File

@ -36,6 +36,13 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
arguments?.let {
val id = it.getString("TaskLinkId")
if (id != null && id.isNotEmpty()){
viewModel.initData(id)
}
}
binding.taskLinkAddPoint.setOnClickListener(this) binding.taskLinkAddPoint.setOnClickListener(this)
binding.taskLinkKind.setOnClickListener(this) binding.taskLinkKind.setOnClickListener(this)
binding.taskLinkFunctionalLevel.setOnClickListener(this) binding.taskLinkFunctionalLevel.setOnClickListener(this)
@ -44,6 +51,8 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
binding.taskLinkBarSave.setOnClickListener(this) binding.taskLinkBarSave.setOnClickListener(this)
binding.taskLinkBack.setOnClickListener(this) binding.taskLinkBack.setOnClickListener(this)
binding.taskLinkClear.setOnClickListener(this) binding.taskLinkClear.setOnClickListener(this)
binding.taskLinkBarDelete.setOnClickListener(this)
/** /**
* 数据操作结束 * 数据操作结束
*/ */
@ -150,6 +159,9 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
binding.taskLinkClear -> { binding.taskLinkClear -> {
viewModel.clearLink() viewModel.clearLink()
} }
binding.taskLinkBarDelete ->{
viewModel.deleteData(requireContext())
}
} }
} }

View File

@ -1,5 +1,7 @@
package com.navinfo.omqs.ui.fragment.tasklink package com.navinfo.omqs.ui.fragment.tasklink
import android.app.Dialog
import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Build import android.os.Build
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
@ -8,15 +10,18 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.navinfo.collect.library.data.entity.HadLinkDvoBean import com.navinfo.collect.library.data.entity.HadLinkDvoBean
import com.navinfo.collect.library.data.entity.LinkInfoBean import com.navinfo.collect.library.data.entity.LinkInfoBean
import com.navinfo.collect.library.data.entity.QsRecordBean
import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.utils.GeometryTools import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.omqs.Constant import com.navinfo.omqs.Constant
import com.navinfo.omqs.ui.dialog.FirstDialog
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.bson.codecs.UuidCodec import org.bson.codecs.UuidCodec
import org.bson.internal.UuidHelper import org.bson.internal.UuidHelper
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
@ -102,6 +107,11 @@ class TaskLinkViewModel @Inject constructor(
*/ */
val liveDataTaskBean = MutableLiveData<TaskBean?>() val liveDataTaskBean = MutableLiveData<TaskBean?>()
/**
* 当前正在编辑的线
*/
private var hadLinkDvoBean: HadLinkDvoBean? = null
/** /**
* 当前正在选择哪个数据 1种别 2功能等级 3数据等级 * 当前正在选择哪个数据 1种别 2功能等级 3数据等级
*/ */
@ -184,26 +194,50 @@ class TaskLinkViewModel @Inject constructor(
liveDataToastMessage.postValue("请选择数据等级!") liveDataToastMessage.postValue("请选择数据等级!")
return@launch return@launch
} }
val linkBean = HadLinkDvoBean( val task: TaskBean = liveDataTaskBean.value!!
// taskId = liveDataTaskBean.value!!.id, if (hadLinkDvoBean != null) {
linkPid = UUID.randomUUID().toString(), hadLinkDvoBean!!.taskId = liveDataTaskBean.value!!.id
linkStatus = 3, hadLinkDvoBean!!.length =
length = mapController.measureLayerHandler.lineLengthLiveData.value!!, mapController.measureLayerHandler.lineLengthLiveData.value!!
geometry = GeometryTools.getLineString(mapController.measureLayerHandler.mPathLayer.points), hadLinkDvoBean!!.geometry =
linkInfo = LinkInfoBean( GeometryTools.getLineString(mapController.measureLayerHandler.mPathLayer.points)
hadLinkDvoBean!!.linkInfo = LinkInfoBean(
kind = liveDataSelectKind.value!!.type, kind = liveDataSelectKind.value!!.type,
functionLevel = liveDataSelectFunctionLevel.value!!.type, functionLevel = liveDataSelectFunctionLevel.value!!.type,
dataLevel = liveDataSelectDataLevel.value!!.type, dataLevel = liveDataSelectDataLevel.value!!.type,
) )
) for (l in task.hadLinkDvoList) {
val task: TaskBean = liveDataTaskBean.value!! if (l.linkPid == hadLinkDvoBean!!.linkPid) {
task.hadLinkDvoList.add(linkBean) task.hadLinkDvoList.remove(l)
task.hadLinkDvoList.add(hadLinkDvoBean)
break
}
}
} else {
hadLinkDvoBean = HadLinkDvoBean(
taskId = liveDataTaskBean.value!!.id,
linkPid = UUID.randomUUID().toString(),
linkStatus = 3,
length = mapController.measureLayerHandler.lineLengthLiveData.value!!,
geometry = GeometryTools.getLineString(mapController.measureLayerHandler.mPathLayer.points),
linkInfo = LinkInfoBean(
kind = liveDataSelectKind.value!!.type,
functionLevel = liveDataSelectFunctionLevel.value!!.type,
dataLevel = liveDataSelectDataLevel.value!!.type,
)
)
task.hadLinkDvoList.add(hadLinkDvoBean)
}
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
realm.executeTransaction { realm.executeTransaction {
it.copyToRealmOrUpdate(hadLinkDvoBean)
it.copyToRealmOrUpdate(task) it.copyToRealmOrUpdate(task)
} }
mapController.lineHandler.addTaskLink(linkBean) mapController.lineHandler.addTaskLink(hadLinkDvoBean!!)
sharedPreferences.edit().putString(Constant.SHARED_SYNC_TASK_LINK_ID, linkBean.linkPid) sharedPreferences.edit()
.putString(Constant.SHARED_SYNC_TASK_LINK_ID, hadLinkDvoBean!!.linkPid)
.apply() .apply()
liveDataFinish.postValue(true) liveDataFinish.postValue(true)
} }
@ -231,4 +265,87 @@ class TaskLinkViewModel @Inject constructor(
fun clearLink() { fun clearLink() {
mapController.measureLayerHandler.clear() mapController.measureLayerHandler.clear()
} }
/**
* 初始化数据
*/
fun initData(id: String) {
viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance()
val objects =
realm.where(HadLinkDvoBean::class.java).equalTo("linkPid", id)
.findFirst()
objects?.linkInfo?.let {
for (kind in kindList) {
if (kind.type == it.kind) {
liveDataSelectKind.postValue(kind)
break
}
}
for (function in functionLevelList) {
if (function.type == it.functionLevel) {
liveDataSelectFunctionLevel.postValue(function)
break
}
}
for (data in dataLevelList) {
if (data.type == it.dataLevel) {
liveDataSelectDataLevel.postValue(data)
break
}
}
}
val task =
realm.where(TaskBean::class.java).equalTo("id", objects?.taskId)
.findFirst()
if (task != null) {
liveDataTaskBean.postValue(realm.copyFromRealm(task))
}
hadLinkDvoBean = realm.copyFromRealm(objects)
withContext(Dispatchers.Main) {
mapController.measureLayerHandler.initPathLine(hadLinkDvoBean?.geometry!!)
}
}
}
/**
* 删除数据
*/
fun deleteData(context: Context) {
if(hadLinkDvoBean == null){
liveDataFinish.value = true
return
}
val mDialog = FirstDialog(context)
mDialog.setTitle("提示?")
mDialog.setMessage("是否删除Mark请确认")
mDialog.setPositiveButton("确定"
) { _, _ ->
mDialog.dismiss()
viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance()
realm.executeTransaction {
val task = it.where(TaskBean::class.java).equalTo("id",hadLinkDvoBean!!.taskId).findFirst()
if(task != null) {
for (h in task.hadLinkDvoList) {
if(h.linkPid == hadLinkDvoBean!!.linkPid)
task.hadLinkDvoList.remove(h)
break
}
realm.copyToRealmOrUpdate(task)
}
// val objects = it.where(HadLinkDvoBean::class.java)
// .equalTo("linkPid", hadLinkDvoBean!!.linkPid).findFirst()
// objects?.deleteFromRealm()
}
mapController.lineHandler.removeTaskLink(hadLinkDvoBean!!.linkPid)
mapController.mMapView.vtmMap.updateMap(true)
liveDataFinish.postValue(true)
}
}
mDialog.setNegativeButton("取消", null)
mDialog.show()
}
} }

View File

@ -1690,7 +1690,7 @@
<m k="speedFlag" v="1"> <m k="speedFlag" v="1">
<caption fill="#000000" k="maxSpeed" priority="0" size="12" stroke="#ffffff" <caption fill="#000000" k="maxSpeed" priority="0" size="12" stroke="#ffffff"
stroke-width="1.0"></caption> stroke-width="1.0"></caption>
<symbol src="assets:omdb/icon_4004_1.png" symbol-height="46" <symbol src="assets:omdb/icon_4004_0.svg" symbol-height="46"
symbol-width="46"></symbol> symbol-width="46"></symbol>
<!-- <caption k="minSpeed" dy="-28" fill="#000000" priority="0" size="14" stroke="#ffffff"--> <!-- <caption k="minSpeed" dy="-28" fill="#000000" priority="0" size="14" stroke="#ffffff"-->
<!-- stroke-width="1.0"></caption>--> <!-- stroke-width="1.0"></caption>-->

View File

@ -1,12 +1,13 @@
package com.navinfo.collect.library.data.entity package com.navinfo.collect.library.data.entity
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
open class HadLinkDvoBean @JvmOverloads constructor( open class HadLinkDvoBean @JvmOverloads constructor(
// /** /**
// * 任务id方便捕捉查询 * 任务id方便捕捉查询
// */ */
// var taskId: Int = 0, var taskId: Int = 0,
/** /**
* 图幅号 * 图幅号
*/ */
@ -14,6 +15,7 @@ open class HadLinkDvoBean @JvmOverloads constructor(
/** /**
* linkPid * linkPid
*/ */
@PrimaryKey
var linkPid: String = "", var linkPid: String = "",
/** /**
* (几何)加偏后 * (几何)加偏后

View File

@ -1,6 +1,5 @@
package com.navinfo.collect.library.map package com.navinfo.collect.library.map
import android.os.Build
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.navinfo.collect.library.map.handler.* import com.navinfo.collect.library.map.handler.*

View File

@ -1,6 +1,6 @@
package com.navinfo.collect.library.map.handler package com.navinfo.collect.library.map.handler
import android.content.Context import android.util.Log
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.navinfo.collect.library.map.NIMapView import com.navinfo.collect.library.map.NIMapView
import org.oscim.layers.Layer import org.oscim.layers.Layer
@ -10,6 +10,7 @@ abstract class BaseHandler(context: AppCompatActivity, mapView: NIMapView) {
protected val mMapView: NIMapView = mapView protected val mMapView: NIMapView = mapView
fun addLayer(layer: Layer, groupType: NIMapView.LAYER_GROUPS) { fun addLayer(layer: Layer, groupType: NIMapView.LAYER_GROUPS) {
Log.e("jingo", "增加了图层 ${layer.toString()}")
mMapView.vtmMap.layers().add( mMapView.vtmMap.layers().add(
layer, layer,
groupType.groupIndex groupType.groupIndex
@ -17,11 +18,11 @@ abstract class BaseHandler(context: AppCompatActivity, mapView: NIMapView) {
} }
fun removeLayer(layer: Layer) { fun removeLayer(layer: Layer) {
Log.e("jingo", "移除了图层 ${layer.toString()}")
mMapView.vtmMap.layers().remove(layer) mMapView.vtmMap.layers().remove(layer)
} }
// fun setOnMapClickListener(listener: NIMapView.OnMapClickListener) { // fun setOnMapClickListener(listener: NIMapView.OnMapClickListener) {
// mMapView.setOnMapClickListener(listener) // mMapView.setOnMapClickListener(listener)
// } // }

View File

@ -36,6 +36,7 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(
onTaskLinkItemClickListener = listener onTaskLinkItemClickListener = listener
} }
/** /**
* 路口高亮 * 路口高亮
*/ */
@ -183,6 +184,12 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(
* 增加一条任务高亮线 * 增加一条任务高亮线
*/ */
fun addTaskLink(linkBean: HadLinkDvoBean) { fun addTaskLink(linkBean: HadLinkDvoBean) {
for (marker in omdbTaskMarkerLayer.itemList) {
if ((marker as MarkerItem).title == linkBean.linkPid) {
omdbTaskMarkerLayer.removeItem(marker)
break
}
}
if (linkBean.linkStatus == 3) { if (linkBean.linkStatus == 3) {
val pointList = GeometryTools.getGeoPoints(linkBean.geometry) val pointList = GeometryTools.getGeoPoints(linkBean.geometry)
val geoPoint = if (pointList.size < 3) { val geoPoint = if (pointList.size < 3) {
@ -197,7 +204,10 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(
) )
omdbTaskMarkerLayer.addItem(marker) omdbTaskMarkerLayer.addItem(marker)
} }
omdbTaskLinkLayer.removeLine(linkBean.linkPid)
omdbTaskLinkLayer.addLine(linkBean) omdbTaskLinkLayer.addLine(linkBean)
omdbTaskLinkLayer.update()
mMapView.vtmMap.updateMap(true)
} }
/** /**
@ -211,6 +221,8 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(
} }
} }
omdbTaskLinkLayer.removeLine(linkBeanId) omdbTaskLinkLayer.removeLine(linkBeanId)
omdbTaskLinkLayer.update()
mMapView.vtmMap.updateMap(true)
} }
} }

View File

@ -12,6 +12,7 @@ import com.baidu.location.LocationClientOption.LocationMode
import com.navinfo.collect.library.data.entity.NiLocation import com.navinfo.collect.library.data.entity.NiLocation
import com.navinfo.collect.library.map.NIMapView import com.navinfo.collect.library.map.NIMapView
import com.navinfo.collect.library.utils.DateUtils import com.navinfo.collect.library.utils.DateUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
@ -29,7 +30,7 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
// //
// } // }
val niLocationFlow = MutableSharedFlow<NiLocation>(5) val niLocationFlow = MutableSharedFlow<NiLocation>(3)
init { init {
///添加定位图层到地图,[NIMapView.LAYER_GROUPS.NAVIGATION] 是最上层layer组 ///添加定位图层到地图,[NIMapView.LAYER_GROUPS.NAVIGATION] 是最上层layer组
@ -72,10 +73,10 @@ class LocationLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
// ) // )
// if (niLocationListener != null) { // if (niLocationListener != null) {
getCurrentNiLocation()?.let { it1 -> getCurrentNiLocation()?.let { it1 ->
mContext.lifecycleScope.launch { mContext.lifecycleScope.launch(Dispatchers.Default) {
niLocationFlow.emit(it1) niLocationFlow.emit(it1)
} }
// }// niLocationListener.call(it1) } // }// niLocationListener.call(it1) }
} }

View File

@ -5,6 +5,7 @@ import android.content.SharedPreferences
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Color import android.graphics.Color
import android.util.Log
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@ -536,58 +537,67 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
* 添加质检数据marker * 添加质检数据marker
*/ */
public suspend fun addNiLocationMarkerItem(niLocation: NiLocation) { public suspend fun addNiLocationMarkerItem(niLocation: NiLocation) {
synchronized(this) {
Log.e("jingo", "插入定位点0 ")
var itemizedLayer: ItemizedLayer? = null var itemizedLayer: ItemizedLayer? = null
val direction: Double = niLocation.direction val direction: Double = niLocation.direction
val geoMarkerItem: MarkerItem = ClusterMarkerItem( val geoMarkerItem: MarkerItem = ClusterMarkerItem(
niLocation, niLocation,
niLocation.id, niLocation.id,
niLocation.time, niLocation.time,
GeoPoint(niLocation.latitude, niLocation.longitude) GeoPoint(niLocation.latitude, niLocation.longitude)
) )
//角度 //角度
when (niLocation.media) { when (niLocation.media) {
0 -> { 0 -> {
//角度不为0时需要预先设置marker样式并进行角度设置否则使用图层默认的sym即可 //角度不为0时需要预先设置marker样式并进行角度设置否则使用图层默认的sym即可
//角度不为0时需要预先设置marker样式并进行角度设置否则使用图层默认的sym即可 //角度不为0时需要预先设置marker样式并进行角度设置否则使用图层默认的sym即可
if (direction != 0.0) { if (direction != 0.0) {
val symbolGpsTemp = val symbolGpsTemp =
MarkerSymbol(niLocationBitmap, MarkerSymbol.HotspotPlace.CENTER, false) MarkerSymbol(niLocationBitmap, MarkerSymbol.HotspotPlace.CENTER, false)
geoMarkerItem.marker = symbolGpsTemp geoMarkerItem.marker = symbolGpsTemp
geoMarkerItem.setRotation(direction.toFloat()) geoMarkerItem.setRotation(direction.toFloat())
} else { } else {
val symbolGpsTemp = val symbolGpsTemp =
MarkerSymbol(niLocationBitmap2, MarkerSymbol.HotspotPlace.CENTER, false) MarkerSymbol(niLocationBitmap2, MarkerSymbol.HotspotPlace.CENTER, false)
geoMarkerItem.marker = symbolGpsTemp geoMarkerItem.marker = symbolGpsTemp
}
Log.e(
"jingo",
"插入定位点1 ${geoMarkerItem.geoPoint.longitude} ${geoMarkerItem.geoPoint.latitude}"
)
niLocationItemizedLayer.addItem(geoMarkerItem)
itemizedLayer = niLocationItemizedLayer
} }
niLocationItemizedLayer.addItem(geoMarkerItem)
itemizedLayer = niLocationItemizedLayer
}
1 -> { 1 -> {
//角度不为0时需要预先设置marker样式并进行角度设置否则使用图层默认的sym即可 //角度不为0时需要预先设置marker样式并进行角度设置否则使用图层默认的sym即可
//角度不为0时需要预先设置marker样式并进行角度设置否则使用图层默认的sym即可 //角度不为0时需要预先设置marker样式并进行角度设置否则使用图层默认的sym即可
if (direction != 0.0) { if (direction != 0.0) {
val symbolLidarTemp = val symbolLidarTemp =
MarkerSymbol(niLocationBitmap1, MarkerSymbol.HotspotPlace.CENTER, false) MarkerSymbol(niLocationBitmap1, MarkerSymbol.HotspotPlace.CENTER, false)
geoMarkerItem.marker = symbolLidarTemp geoMarkerItem.marker = symbolLidarTemp
geoMarkerItem.setRotation(direction.toFloat()) geoMarkerItem.setRotation(direction.toFloat())
} else { } else {
val symbolGpsTemp = val symbolGpsTemp =
MarkerSymbol(niLocationBitmap3, MarkerSymbol.HotspotPlace.CENTER, false) MarkerSymbol(niLocationBitmap3, MarkerSymbol.HotspotPlace.CENTER, false)
geoMarkerItem.marker = symbolGpsTemp geoMarkerItem.marker = symbolGpsTemp
}
Log.e(
"jingo",
"插入定位点2 ${geoMarkerItem.geoPoint.longitude} ${geoMarkerItem.geoPoint.latitude}"
)
niLocationItemizedLayer.addItem(geoMarkerItem)
itemizedLayer = niLocationItemizedLayer
} }
niLocationItemizedLayer.addItem(geoMarkerItem)
itemizedLayer = niLocationItemizedLayer
}
}
itemizedLayer?.update()
} }
itemizedLayer!!.update()
} }

View File

@ -3,11 +3,9 @@ package com.navinfo.collect.library.map.handler
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Color import android.graphics.Color
import android.os.Build
import android.text.TextPaint import android.text.TextPaint
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.navinfo.collect.library.R import com.navinfo.collect.library.R
@ -453,6 +451,32 @@ open class MeasureLayerHandler(context: AppCompatActivity, mapView: NIMapView) :
} }
} }
/**
* 初始化线数据 用来二次编辑
*/
fun initPathLine(geometry: String) {
bDrawLine = true
mPathLayer.isEnabled = true
mPathLayerTemp.isEnabled = true
val pointList = GeometryTools.getGeoPoints(geometry)
mPathLayer.setPoints(pointList)
for (point in pointList) {
val markerItem = MarkerItem(createUUID(), "", "", point)
markerLayer.addItem(markerItem)
mPathMakers.add(markerItem)
}
if (mPathLayer.points.size > 1) {
val distance: Double = GeometryTools.getDistance(mPathLayer.points)
val bg = BigDecimal(distance)
val f1 = bg.setScale(3, BigDecimal.ROUND_HALF_UP).toDouble()
lineLengthLiveData.value = f1
tempLineDistanceLiveData.value = "${f1}"
} else {
lineLengthLiveData.value = 0.000
}
mMapView.updateMap(true)
}
private val itemGestureListener: OnItemGestureListener<MarkerInterface> = private val itemGestureListener: OnItemGestureListener<MarkerInterface> =
object : OnItemGestureListener<MarkerInterface> { object : OnItemGestureListener<MarkerInterface> {
override fun onItemSingleTapUp(index: Int, item: MarkerInterface): Boolean { override fun onItemSingleTapUp(index: Int, item: MarkerInterface): Boolean {

View File

@ -59,12 +59,11 @@ class OmdbTaskLinkLayer(map: Map, private var style: Style) : VectorLayer(map) {
update() update()
} }
fun removeLine(linkPid: String): Boolean { fun removeLine(linkPid: String) {
if (lineMap.containsKey(linkPid)) { if (lineMap.containsKey(linkPid)) {
super.remove(lineMap[linkPid]) super.remove(lineMap[linkPid])
lineMap.remove(linkPid) lineMap.remove(linkPid)
} }
return false
} }
fun removeLine(geometry: Geometry) { fun removeLine(geometry: Geometry) {