重构轨迹回放业务

This commit is contained in:
qiji4215 2023-07-18 15:45:11 +08:00
parent dfbea188ea
commit 78bd363372
12 changed files with 334 additions and 51 deletions

View File

@ -0,0 +1,8 @@
package com.navinfo.omqs.bean
data class TraceVideoBean(
var userid: String = "",
var playMode: String = "",
var time: String = "",
var command: String = "",
)

View File

@ -6,8 +6,7 @@ import com.navinfo.omqs.bean.IndoorConnectionInfoBean
import com.navinfo.omqs.bean.LoginUserBean
import com.navinfo.omqs.bean.QRCodeBean
import com.navinfo.omqs.bean.SysUserBean
import okhttp3.ResponseBody
import retrofit2.Response
import com.navinfo.omqs.bean.TraceVideoBean
/**
@ -38,4 +37,9 @@ interface NetworkService {
* 更新用户信息
*/
suspend fun updateServerInfo(url: String,indoorConnectionInfoBean: IndoorConnectionInfoBean): NetResult<QRCodeBean>
/**
* 设置轨迹对应的视频
*/
suspend fun sendServerCommand(url: String,traceVideoBean: TraceVideoBean): NetResult<QRCodeBean>
}

View File

@ -6,6 +6,7 @@ import com.navinfo.omqs.bean.IndoorConnectionInfoBean
import com.navinfo.omqs.bean.LoginUserBean
import com.navinfo.omqs.bean.QRCodeBean
import com.navinfo.omqs.bean.SysUserBean
import com.navinfo.omqs.bean.TraceVideoBean
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import okhttp3.ResponseBody
@ -110,6 +111,33 @@ class NetworkServiceImpl @Inject constructor(
map["baseurl"] = indoorConnectionInfoBean.baseurl
map["platform"] = indoorConnectionInfoBean.platform
val result = netApi.retrofitUpdateServerInfo(url,map)
if (result.isSuccessful) {
if (result.code() == 200) {
NetResult.Success(result.body())
} else {
NetResult.Failure<Any>(result.code(), result.message())
}
} else {
NetResult.Failure<Any>(result.code(), result.message())
}
} catch (e: Exception) {
NetResult.Error<Any>(e)
}
}
override suspend fun sendServerCommand(
url: String,
traceVideoBean: TraceVideoBean
): NetResult<QRCodeBean> =
//在IO线程中运行
withContext(Dispatchers.IO) {
return@withContext try {
val map: MutableMap<String, String> = HashMap()
map["userid"] = traceVideoBean.userid
map["playMode"] = traceVideoBean.playMode
map["time"] = traceVideoBean.time
val result = netApi.retrofitUpdateServerInfo(url,map)
if (result.isSuccessful) {
if (result.code() == 200) {

View File

@ -20,11 +20,13 @@ import androidx.navigation.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.navinfo.collect.library.data.entity.NiLocation
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.omqs.Constant
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.bean.TraceVideoBean
import com.navinfo.omqs.databinding.ActivityMainBinding
import com.navinfo.omqs.http.offlinemapdownload.OfflineMapDownloadManager
import com.navinfo.omqs.tools.LayerConfigUtils
@ -34,12 +36,14 @@ import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapFragment
import com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListFragment
import com.navinfo.omqs.ui.fragment.signMoreInfo.SignMoreInfoFragment
import com.navinfo.omqs.ui.fragment.tasklist.TaskManagerFragment
import com.navinfo.omqs.ui.other.BaseToast
import com.navinfo.omqs.ui.widget.RecyclerViewSpacesItemDecoration
import com.navinfo.omqs.util.FlowEventBus
import com.navinfo.omqs.util.SpeakMode
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.oscim.core.GeoPoint
import org.oscim.layers.marker.MarkerItem
import org.oscim.renderer.GLViewport
import org.videolan.vlc.Util
import java.math.BigDecimal
@ -227,7 +231,10 @@ class MainActivity : BaseActivity() {
//捕捉列表变化回调
viewModel.liveDataNILocationList.observe(this) {
if(viewModel.isSelectTrace()){
Toast.makeText(this,"轨迹被点击了",Toast.LENGTH_LONG).show()
//Toast.makeText(this,"轨迹被点击了",Toast.LENGTH_LONG).show()
viewModel.showMarker(this,it)
val traceVideoBean = TraceVideoBean(command = "videotime?", userid = Constant.USER_ID, time = "${it.time}:000")
viewModel.sendServerCommand(this,traceVideoBean)
}
}
@ -535,10 +542,17 @@ class MainActivity : BaseActivity() {
@RequiresApi(Build.VERSION_CODES.N)
fun tracePointsOnclick() {
viewModel.setSelectTrace(!viewModel.isSelectTrace())
binding.mainActivityTraceSnapshotPoints.isSelected = viewModel.isSelectTrace()
if(viewModel.isSelectTrace()){
Toast.makeText(this,"请选择轨迹点!",Toast.LENGTH_LONG).show()
//调用撤销自动播放
binding.mainActivitySnapshotFinish.isEnabled = false
binding.mainActivitySnapshotRewind.isEnabled = false
binding.mainActivitySnapshotPause.isEnabled = false
binding.mainActivitySnapshotNext.isEnabled = false
viewModel.cancelTrace()
}
binding.mainActivityTraceSnapshotPoints.isSelected = viewModel.isSelectTrace()
}
/**
@ -550,6 +564,7 @@ class MainActivity : BaseActivity() {
viewModel.setSelectTrace(false)
viewModel.setMediaFlag(false)
viewModel.setSelectPauseTrace(false)
binding.mainActivityMenuIndoorGroup.visibility = View.GONE
binding.mainActivityTraceSnapshotPoints.isSelected = viewModel.isSelectTrace()
binding.mainActivitySnapshotMediaFlag.isSelected = viewModel.isMediaFlag()
binding.mainActivitySnapshotPause.isSelected = viewModel.isSelectPauseTrace()
@ -569,7 +584,16 @@ class MainActivity : BaseActivity() {
*/
@RequiresApi(Build.VERSION_CODES.N)
fun rewindTraceOnclick() {
pasePlayTrace()
pausePlayTrace()
val item = mapController.markerHandle.getNILocation(viewModel.currentIndexNiLocation-1)
if(item!=null){
viewModel.currentIndexNiLocation = viewModel.currentIndexNiLocation-1
viewModel.showMarker(this,(item as MarkerItem).uid as NiLocation)
val traceVideoBean = TraceVideoBean(command = "videotime?", userid = Constant.USER_ID, time = "${(item.uid as NiLocation).time}:000")
viewModel.sendServerCommand(this,traceVideoBean)
}else{
dealNoData()
}
}
/**
@ -581,6 +605,41 @@ class MainActivity : BaseActivity() {
binding.mainActivitySnapshotPause.isSelected = viewModel.isSelectPauseTrace()
viewModel.setSelectTrace(false)
binding.mainActivityTraceSnapshotPoints.isSelected = viewModel.isSelectTrace()
if(viewModel.isSelectPauseTrace()){
playVideo()
}else{
pauseVideo()
viewModel.cancelTrace()
}
}
@RequiresApi(Build.VERSION_CODES.N)
fun playVideo(){
if (mapController.markerHandle.getCurrentMark()==null) {
BaseToast.makeText(this, "请先选择轨迹点!", BaseToast.LENGTH_SHORT).show()
return
}
viewModel.setSelectTrace(false)
binding.mainActivityTraceSnapshotPoints.isSelected = viewModel.isSelectTrace()
val traceVideoBean = TraceVideoBean(command = "playVideo?", userid = Constant.USER_ID)
viewModel.sendServerCommand(this,traceVideoBean)
}
/**
* 设置为播放状态
*/
@RequiresApi(Build.VERSION_CODES.N)
fun setPlayStatus() {
//切换为播放
viewModel.setSelectPauseTrace(true)
binding.mainActivitySnapshotPause.isSelected = viewModel.isSelectPauseTrace()
playVideo()
}
@RequiresApi(Build.VERSION_CODES.N)
fun pauseVideo(){
val traceVideoBean = TraceVideoBean(command = "pauseVideo?", userid = Constant.USER_ID)
viewModel.sendServerCommand(this,traceVideoBean)
}
/**
@ -588,15 +647,38 @@ class MainActivity : BaseActivity() {
*/
@RequiresApi(Build.VERSION_CODES.N)
fun nextTraceOnclick() {
pasePlayTrace()
pausePlayTrace()
val item = mapController.markerHandle.getNILocation(viewModel.currentIndexNiLocation+1)
if(item!=null){
viewModel.currentIndexNiLocation = viewModel.currentIndexNiLocation+1
viewModel.showMarker(this,(item as MarkerItem).uid as NiLocation)
val traceVideoBean = TraceVideoBean(command = "videotime?", userid = Constant.USER_ID, time = "${(item.uid as NiLocation).time}:000")
viewModel.sendServerCommand(this,traceVideoBean)
}else{
dealNoData()
}
}
@RequiresApi(Build.VERSION_CODES.N)
fun pasePlayTrace() {
private fun dealNoData() {
BaseToast.makeText(this, "无数据了!", Toast.LENGTH_SHORT).show()
//无数据时自动暂停播放,并停止轨迹
if (viewModel.isSelectPauseTrace()) {
pauseVideo()
viewModel.cancelTrace()
viewModel.setSelectPauseTrace(false)
binding.mainActivitySnapshotPause.isSelected = viewModel.isSelectPauseTrace()
}
}
@RequiresApi(Build.VERSION_CODES.N)
fun pausePlayTrace() {
viewModel.setSelectTrace(false)
binding.mainActivityTraceSnapshotPoints.isSelected = viewModel.isSelectTrace()
viewModel.setSelectPauseTrace(false)
binding.mainActivitySnapshotPause.isSelected = viewModel.isSelectPauseTrace()
viewModel.cancelTrace()
}

View File

@ -15,10 +15,10 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.PopupWindow
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewModelScope
import androidx.navigation.findNavController
import com.blankj.utilcode.util.ToastUtils
@ -35,10 +35,16 @@ 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.QRCodeBean
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.bean.TraceVideoBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.http.NetResult
import com.navinfo.omqs.http.NetworkService
import com.navinfo.omqs.ui.activity.scan.QrCodeStatus
import com.navinfo.omqs.ui.dialog.CommonDialog
import com.navinfo.omqs.ui.manager.TakePhotoManager
import com.navinfo.omqs.ui.other.BaseToast
import com.navinfo.omqs.ui.widget.SignUtil
import com.navinfo.omqs.util.DateTimeUtil
import com.navinfo.omqs.util.SoundMeter
@ -56,6 +62,7 @@ import org.oscim.core.MapPosition
import org.oscim.map.Map
import org.videolan.libvlc.LibVlcUtil
import java.io.File
import java.io.IOException
import java.util.*
import javax.inject.Inject
@ -69,6 +76,7 @@ class MainViewModel @Inject constructor(
private val mapController: NIMapController,
private val traceDataBase: TraceDataBase,
private val realmOperateHelper: RealmOperateHelper,
private val networkService: NetworkService,
private val sharedPreferences: SharedPreferences
) : ViewModel() {
@ -97,6 +105,8 @@ class MainViewModel @Inject constructor(
*/
val liveDataSignMoreInfo = MutableLiveData<RenderEntity>()
private var traceTag: String = "TRACE_TAG"
// var testPoint = GeoPoint(0, 0)
//uuid标识用于记录轨迹组
@ -120,6 +130,9 @@ class MainViewModel @Inject constructor(
val liveDataCenterPoint = MutableLiveData<MapPosition>()
//状态
val qrCodeStatus: MutableLiveData<QrCodeStatus> = MutableLiveData()
/**
* 是不是线选择模式
*/
@ -144,6 +157,8 @@ class MainViewModel @Inject constructor(
private var lastNiLocaion: NiLocation? = null
var currentIndexNiLocation: Int = 0;
init {
mapController.mMapView.vtmMap.events.bind(Map.UpdateListener { e, mapPosition ->
when (e) {
@ -163,8 +178,9 @@ class MainViewModel @Inject constructor(
liveDataNoteIdList.value = list
}
override fun onNiLocation(item: NiLocation) {
override fun onNiLocation(index: Int, item: NiLocation) {
liveDataNILocationList.value = item
currentIndexNiLocation = index
}
})
@ -175,11 +191,11 @@ class MainViewModel @Inject constructor(
mapController.onMapClickFlow.collectLatest {
// testPoint = it
//线选择状态
/* if (bSelectRoad) {
captureLink(it)
} else {
captureItem(it)
}*/
/* if (bSelectRoad) {
captureLink(it)
} else {
captureItem(it)
}*/
}
}
viewModelScope.launch(Dispatchers.IO) {
@ -259,7 +275,7 @@ class MainViewModel @Inject constructor(
mapController.locationLayerHandler.niLocationFlow.collect { location ->
//过滤掉无效点
if(!GeometryTools.isCheckError(location.longitude,location.latitude)){
if (!GeometryTools.isCheckError(location.longitude, location.latitude)) {
val geometry = GeometryTools.createGeometry(
GeoPoint(
location.latitude, location.longitude
@ -289,9 +305,10 @@ class MainViewModel @Inject constructor(
if (lastNiLocaion != null) {
val disance = GeometryTools.getDistance(
location.latitude, location.longitude,
lastNiLocaion!!.latitude, lastNiLocaion!!.longitude)
lastNiLocaion!!.latitude, lastNiLocaion!!.longitude
)
//相距差距大于2.5米以上进行存储
if (disance > 2.5) {
if (disance > 2.5 && disance < 60) {
traceDataBase.niLocationDao.insert(location)
mapController.markerHandle.addNiLocationMarkerItem(location)
mapController.mMapView.vtmMap.updateMap(true)
@ -299,8 +316,8 @@ class MainViewModel @Inject constructor(
}
} else {
traceDataBase.niLocationDao.insert(location)
/* mapController.markerHandle.addNiLocationMarkerItem(location)
mapController.mMapView.vtmMap.updateMap(true)*/
mapController.markerHandle.addNiLocationMarkerItem(location)
mapController.mMapView.vtmMap.updateMap(true)
lastNiLocaion = location
}
}
@ -309,7 +326,11 @@ class MainViewModel @Inject constructor(
//用于定位点捕捉道路
viewModelScope.launch(Dispatchers.Default) {
mapController.locationLayerHandler.niLocationFlow.collectLatest { location ->
if (!isSelectRoad()&&!GeometryTools.isCheckError(location.longitude,location.latitude)) captureLink(
if (!isSelectRoad() && !GeometryTools.isCheckError(
location.longitude,
location.latitude
)
) captureLink(
GeoPoint(
location.latitude,
location.longitude
@ -335,11 +356,11 @@ class MainViewModel @Inject constructor(
*/
@RequiresApi(Build.VERSION_CODES.N)
private suspend fun captureLink(point: GeoPoint) {
if(captureLinkState){
if (captureLinkState) {
return
}
try{
try {
captureLinkState = true
val linkList = realmOperateHelper.queryLink(
@ -437,9 +458,9 @@ class MainViewModel @Inject constructor(
liveDataRoadName.postValue(null)
}
}catch (e:Exception){
} catch (e: Exception) {
}finally {
} finally {
captureLinkState = false
}
@ -673,5 +694,114 @@ class MainViewModel @Inject constructor(
liveDataSignMoreInfo.value = data
}
fun sendServerCommand(context: Context, traceVideoBean: TraceVideoBean) {
if (TextUtils.isEmpty(Constant.INDOOR_IP)) {
Toast.makeText(context, "获取ip失败", Toast.LENGTH_LONG).show()
return
}
viewModelScope.launch(Dispatchers.Default) {
val url = "http://${Constant.INDOOR_IP}:8080/sensor/service/${traceVideoBean.command}?"
when (val result = networkService.sendServerCommand(
url = url,
traceVideoBean = traceVideoBean
)) {
is NetResult.Success<*> -> {
if (result.data != null) {
try {
val defaultUserResponse = result.data as QRCodeBean
if (defaultUserResponse.errcode == 0) {
withContext(Dispatchers.Main) {
Toast.makeText(
context,
"命令成功。",
Toast.LENGTH_LONG
).show()
qrCodeStatus.postValue(QrCodeStatus.QR_CODE_STATUS_UPDATE_VIDEO_INFO_SUCCESS)
}
} else {
withContext(Dispatchers.Main) {
Toast.makeText(
context,
"命令无效${defaultUserResponse.errmsg}",
Toast.LENGTH_SHORT
)
.show()
}
}
} catch (e: IOException) {
withContext(Dispatchers.Main) {
Toast.makeText(
context,
"${e.message}",
Toast.LENGTH_SHORT
).show()
}
}
}
}
is NetResult.Error<*> -> {
withContext(Dispatchers.Main) {
Toast.makeText(
context,
"${result.exception.message}",
Toast.LENGTH_SHORT
)
.show()
}
qrCodeStatus.postValue(QrCodeStatus.QR_CODE_STATUS_NET_FAILURE)
}
is NetResult.Failure<*> -> {
withContext(Dispatchers.Main) {
Toast.makeText(
context,
"${result.code}:${result.msg}",
Toast.LENGTH_SHORT
)
.show()
}
qrCodeStatus.postValue(QrCodeStatus.QR_CODE_STATUS_NET_FAILURE)
}
else -> {}
}
}
}
/**
* 显示marker
* @param trackCollection 轨迹点
* @param type 1 提示最后一个轨迹点 非1提示第一个轨迹点
*/
fun showMarker(context: Context, niLocation: NiLocation) {
if (mapController.markerHandle != null) {
mapController.markerHandle.removeMarker(traceTag)
if (niLocation != null) {
mapController.markerHandle.addMarker(
GeoPoint(
niLocation.latitude,
niLocation.longitude
), traceTag, "", niLocation as java.lang.Object
)
}
}
}
/**
* 结束自动播放
*/
fun cancelTrace() {
}
}

View File

@ -33,6 +33,16 @@ enum class QrCodeStatus {
* 信息更新成功
*/
QR_CODE_STATUS_SERVER_INFO_SUCCESS,
/**
* 信息更新轨迹成功
*/
QR_CODE_STATUS_UPDATE_VIDEO_INFO_SUCCESS,
/**
* 信息更新轨迹失败
*/
QR_CODE_STATUS_UPDATE_VIDEO_INFO_FAILURE,
}
@HiltViewModel

View File

@ -61,6 +61,12 @@ class QrCodeActivity : BaseActivity() {
}
QrCodeStatus.QR_CODE_STATUS_SERVER_INFO_SUCCESS -> {
}
QrCodeStatus.QR_CODE_STATUS_UPDATE_VIDEO_INFO_SUCCESS -> {
}
QrCodeStatus.QR_CODE_STATUS_UPDATE_VIDEO_INFO_FAILURE -> {
}
}
}

View File

@ -212,6 +212,7 @@ class EvaluationResultViewModel @Inject constructor(
if (classType2 != null) {
classType = classType2
}
classCode = bean.renderEntity.code.toString()
}
//如果右侧栏没数据,给个默认值
if (liveDataQsRecordBean.value!!.classType.isEmpty()) {
@ -298,11 +299,12 @@ class EvaluationResultViewModel @Inject constructor(
/**
* 查询问题类型列表
*/
fun getProblemTypeList(classType: String) {
fun getProblemTypeList(scProblemTypeBean: ScProblemTypeBean) {
viewModelScope.launch(Dispatchers.IO) {
getProblemList(classType)
getProblemList(scProblemTypeBean.classType)
}
classTypeTemp = classType
classTypeTemp = scProblemTypeBean.classType
classCodeTemp = scProblemTypeBean.elementCode
}
/**
@ -381,7 +383,7 @@ class EvaluationResultViewModel @Inject constructor(
GeoPoint(
p.latitude,
p.longitude
), markerTitle
), markerTitle,"",null
)
//获取linkid

View File

@ -7,7 +7,7 @@ import com.navinfo.omqs.databinding.TextItemSelectBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder
class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) :
class LeftAdapter(private var itemListener: ((Int, ScProblemTypeBean) -> Unit?)? = null) :
BaseRecyclerViewAdapter<ScProblemTypeBean>() {
private var selectTitle = ""
@ -28,7 +28,7 @@ class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) :
selectTitle = title.classType
notifyDataSetChanged()
}
itemListener?.invoke(position, title.classType)
itemListener?.invoke(position, title)
}
}

View File

@ -380,6 +380,7 @@
<ImageButton
android:id="@+id/main_activity_snapshot_next"
style="@style/top_right_drawer_btns_style"
android:onClick="@{()->mainActivity.nextTraceOnclick()}"
android:src="@drawable/map_trace_next" />
<View

View File

@ -14,7 +14,7 @@ import java.util.UUID;
* @Date 2022/4/14
* @Description: ${TODO}(数据基类)
*/
public class Feature implements Serializable, Cloneable {
public class Feature extends Object implements Serializable, Cloneable {
// //主键
// @PrimaryKey(autoGenerate = true)
// public int rowId;

View File

@ -1,15 +1,12 @@
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
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
@ -20,11 +17,6 @@ import com.navinfo.collect.library.map.layers.MyItemizedLayer
import com.navinfo.collect.library.map.layers.NoteLineLayer
import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.collect.library.utils.StringUtil
import io.realm.Realm
import io.realm.kotlin.where
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.locationtech.jts.geom.Geometry
import org.locationtech.jts.geom.LineString
import org.locationtech.jts.geom.Polygon
@ -179,7 +171,7 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
object : OnItemGestureListener<MarkerInterface> {
override fun onItemSingleTapUp(index: Int, item: MarkerInterface?): Boolean {
itemListener?.let {
it.onNiLocation((niLocationItemizedLayer.itemList[index] as MarkerItem).uid as NiLocation)
it.onNiLocation(index,(niLocationItemizedLayer.itemList[index] as MarkerItem).uid as NiLocation)
}
return true
}
@ -303,7 +295,8 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
fun addMarker(
geoPoint: GeoPoint,
title: String?,
description: String? = ""
description: String? = "",
uid: java.lang.Object?=null,
) {
var marker: MarkerItem? = null
for (e in mDefaultMarkerLayer.itemList) {
@ -318,6 +311,7 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
tempTitle = StringUtil.createUUID()
}
val marker = MarkerItem(
uid,
tempTitle,
description,
geoPoint
@ -333,6 +327,14 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
}
}
fun getCurrentMark(): MarkerInterface? {
if(mDefaultMarkerLayer!=null){
return mDefaultMarkerLayer.itemList[mDefaultMarkerLayer.itemList.size-1]
}
return null
}
/**
* 移除marker
*/
@ -520,9 +522,13 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
/**
* 添加质检数据marker
*/
public suspend fun addNiLocationMarkerItem(niLocation: NiLocation) {
fun addNiLocationMarkerItem(niLocation: NiLocation) {
var geoMarkerItem = createNILocationBitmap(niLocation)
niLocationItemizedLayer.addItem(geoMarkerItem)
niLocationItemizedLayer.update()
}
var itemizedLayer: ItemizedLayer? = null
private fun createNILocationBitmap(niLocation: NiLocation): MarkerItem{
val direction: Double = niLocation.direction
@ -548,8 +554,6 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
MarkerSymbol(niLocationBitmap2, MarkerSymbol.HotspotPlace.CENTER, false)
geoMarkerItem.marker = symbolGpsTemp
}
niLocationItemizedLayer.addItem(geoMarkerItem)
itemizedLayer = niLocationItemizedLayer
}
1 -> {
@ -565,14 +569,10 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
MarkerSymbol(niLocationBitmap3, MarkerSymbol.HotspotPlace.CENTER, false)
geoMarkerItem.marker = symbolGpsTemp
}
niLocationItemizedLayer.addItem(geoMarkerItem)
itemizedLayer = niLocationItemizedLayer
}
}
itemizedLayer!!.update()
return geoMarkerItem
}
@ -794,10 +794,22 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
niLocationItemizedLayer.update()
}
fun getNILocationItemizedLayerSize():Int{
return niLocationItemizedLayer.itemList.size
}
fun getNILocation(index:Int):MarkerInterface?{
return if(index>-1&&index<getNILocationItemizedLayerSize()){
niLocationItemizedLayer.itemList[index]
}else{
null
}
}
}
interface OnQsRecordItemClickListener {
fun onQsRecordList(list: MutableList<String>)
fun onNoteList(list: MutableList<String>)
fun onNiLocation(it: NiLocation)
fun onNiLocation(index:Int,it: NiLocation)
}