重构测量工具代码,修改代码逻辑和展现形式。
增加面积,角度测量 修改地图渲染面会崩溃的问题
This commit is contained in:
@@ -9,6 +9,7 @@ import android.util.Log
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.widget.EditText
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
@@ -20,7 +21,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.navinfo.collect.library.map.NIMapController
|
||||
import com.navinfo.collect.library.map.NIMapOptions
|
||||
import com.navinfo.collect.library.map.handler.MeasureLayerHandler
|
||||
import com.navinfo.omqs.Constant
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.bean.ImportConfig
|
||||
@@ -397,9 +398,124 @@ class MainActivity : BaseActivity() {
|
||||
supportFragmentManager.beginTransaction()
|
||||
.add(R.id.console_fragment_layout, ConsoleFragment()).commit()
|
||||
}
|
||||
|
||||
initMeasuringTool()
|
||||
}
|
||||
|
||||
//根据输入的经纬度跳转坐标
|
||||
/**
|
||||
*初始化测量工具栏的点击事件
|
||||
*/
|
||||
|
||||
private fun initMeasuringTool() {
|
||||
val root = binding.mainActivityMeasuringTool.root
|
||||
root.findViewById<View>(R.id.measuring_tool_select_point)
|
||||
.setOnClickListener(measuringToolClickListener)
|
||||
root.findViewById<View>(R.id.measuring_tool_close)
|
||||
.setOnClickListener(measuringToolClickListener)
|
||||
root.findViewById<View>(R.id.measuring_tool_backspace)
|
||||
.setOnClickListener(measuringToolClickListener)
|
||||
root.findViewById<View>(R.id.measuring_tool_reset)
|
||||
.setOnClickListener(measuringToolClickListener)
|
||||
root.findViewById<View>(R.id.measuring_tool_distance)
|
||||
.setOnClickListener(measuringToolClickListener)
|
||||
root.findViewById<View>(R.id.measuring_tool_area)
|
||||
.setOnClickListener(measuringToolClickListener)
|
||||
root.findViewById<View>(R.id.measuring_tool_angle)
|
||||
.setOnClickListener(measuringToolClickListener)
|
||||
}
|
||||
|
||||
/**
|
||||
* 测量工具点击事件
|
||||
*/
|
||||
private val measuringToolClickListener = View.OnClickListener {
|
||||
when (it.id) {
|
||||
//选点
|
||||
R.id.measuring_tool_select_point -> {
|
||||
viewModel.addPointForMeasuringTool()
|
||||
}
|
||||
//关闭
|
||||
R.id.measuring_tool_close -> {
|
||||
measuringToolOff()
|
||||
}
|
||||
//上一步
|
||||
R.id.measuring_tool_backspace -> {
|
||||
viewModel.backPointForMeasuringTool()
|
||||
}
|
||||
//重绘
|
||||
R.id.measuring_tool_reset -> {
|
||||
viewModel.resetMeasuringTool()
|
||||
}
|
||||
//测距
|
||||
R.id.measuring_tool_distance -> {
|
||||
it.isSelected = true
|
||||
viewModel.setMeasuringToolType(MeasureLayerHandler.MEASURE_TYPE.DISTANCE)
|
||||
val root = binding.mainActivityMeasuringTool.root
|
||||
root.findViewById<View>(R.id.measuring_tool_area).isSelected = false
|
||||
root.findViewById<View>(R.id.measuring_tool_angle).isSelected = false
|
||||
}
|
||||
//测面积
|
||||
R.id.measuring_tool_area -> {
|
||||
it.isSelected = true
|
||||
viewModel.setMeasuringToolType(MeasureLayerHandler.MEASURE_TYPE.AREA)
|
||||
val root = binding.mainActivityMeasuringTool.root
|
||||
root.findViewById<View>(R.id.measuring_tool_distance).isSelected = false
|
||||
root.findViewById<View>(R.id.measuring_tool_angle).isSelected = false
|
||||
}
|
||||
//测角度
|
||||
R.id.measuring_tool_angle -> {
|
||||
it.isSelected = true
|
||||
viewModel.setMeasuringToolType(MeasureLayerHandler.MEASURE_TYPE.ANGLE)
|
||||
val root = binding.mainActivityMeasuringTool.root
|
||||
root.findViewById<View>(R.id.measuring_tool_distance).isSelected = false
|
||||
root.findViewById<View>(R.id.measuring_tool_area).isSelected = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始测量
|
||||
*/
|
||||
private fun measuringToolOn() {
|
||||
val root = binding.mainActivityMeasuringTool.root
|
||||
val valueView = root.findViewById<TextView>(R.id.measuring_tool_value)
|
||||
val unitView = root.findViewById<TextView>(R.id.measuring_tool_value_unit)
|
||||
val centerTextView = binding.mainActivityHomeCenterText
|
||||
//监听测距值
|
||||
mapController.measureLayerHandler.measureValueLiveData.observe(this) {
|
||||
valueView.text = it.valueString
|
||||
unitView.text = it.unit
|
||||
}
|
||||
mapController.measureLayerHandler.tempMeasureValueLiveData.observe(this)
|
||||
{
|
||||
centerTextView.text = "${it.valueString}${it.unit}"
|
||||
}
|
||||
viewModel.setMeasuringToolEnable(true)
|
||||
binding.mainActivityHomeCenter.visibility = View.VISIBLE
|
||||
binding.mainActivityHomeCenterText.visibility = View.VISIBLE
|
||||
viewModel.setMeasuringToolType(MeasureLayerHandler.MEASURE_TYPE.DISTANCE)
|
||||
root.visibility = View.VISIBLE
|
||||
root.findViewById<View>(R.id.measuring_tool_distance).isSelected = true
|
||||
root.findViewById<View>(R.id.measuring_tool_area).isSelected = false
|
||||
root.findViewById<View>(R.id.measuring_tool_angle).isSelected = false
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 结束测量
|
||||
*/
|
||||
private fun measuringToolOff() {
|
||||
//监听测距值
|
||||
mapController.measureLayerHandler.measureValueLiveData.removeObservers(this)
|
||||
mapController.measureLayerHandler.tempMeasureValueLiveData.removeObservers(this)
|
||||
viewModel.setMeasuringToolEnable(false)
|
||||
binding.mainActivityHomeCenter.visibility = View.GONE
|
||||
binding.mainActivityHomeCenterText.visibility = View.GONE
|
||||
binding.mainActivityMeasuringTool.root.visibility = View.GONE
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据输入的经纬度跳转坐标
|
||||
*/
|
||||
fun jumpPosition() {
|
||||
val view = this.layoutInflater.inflate(R.layout.dialog_view_edittext, null)
|
||||
val inputDialog = MaterialAlertDialogBuilder(
|
||||
@@ -488,10 +604,10 @@ class MainActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击计算
|
||||
* 点击测速
|
||||
*/
|
||||
fun onClickCalcDisance() {
|
||||
|
||||
fun onClickCalcDistance() {
|
||||
measuringToolOn()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -825,7 +941,7 @@ class MainActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun showMainActivityBottomSheetGroup(){
|
||||
private fun showMainActivityBottomSheetGroup() {
|
||||
binding.mainActivityBottomSheetGroup.visibility = View.VISIBLE
|
||||
mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 128, 65)
|
||||
mapController.mMapView.vtmMap.animator().animateTo(
|
||||
@@ -836,7 +952,7 @@ class MainActivity : BaseActivity() {
|
||||
)
|
||||
}
|
||||
|
||||
private fun hideMainActivityBottomSheetGroup(){
|
||||
private fun hideMainActivityBottomSheetGroup() {
|
||||
binding.mainActivityBottomSheetGroup.visibility = View.GONE
|
||||
mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 128, 5)
|
||||
mapController.mMapView.vtmMap.animator().animateTo(
|
||||
|
||||
@@ -22,16 +22,12 @@ import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.navigation.findNavController
|
||||
import com.blankj.utilcode.util.ToastUtils
|
||||
import com.blankj.utilcode.util.ViewUtils.runOnUiThread
|
||||
import com.navinfo.collect.library.data.dao.impl.TraceDataBase
|
||||
import com.navinfo.collect.library.data.entity.*
|
||||
import com.navinfo.collect.library.garminvirbxe.HostBean
|
||||
import com.navinfo.collect.library.map.NIMapController
|
||||
import com.navinfo.collect.library.map.OnGeoPointClickListener
|
||||
import com.navinfo.collect.library.map.handler.ONNoteItemClickListener
|
||||
import com.navinfo.collect.library.map.handler.OnNiLocationItemListener
|
||||
import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener
|
||||
import com.navinfo.collect.library.map.handler.OnTaskLinkItemClickListener
|
||||
import com.navinfo.collect.library.map.handler.*
|
||||
import com.navinfo.collect.library.utils.GeometryTools
|
||||
import com.navinfo.collect.library.utils.GeometryToolsKt
|
||||
import com.navinfo.omqs.Constant
|
||||
@@ -59,10 +55,8 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.locationtech.jts.geom.Point
|
||||
import org.oscim.core.GeoPoint
|
||||
import org.oscim.core.MapPosition
|
||||
import org.oscim.layers.marker.MarkerItem
|
||||
import org.oscim.map.Map
|
||||
import org.videolan.libvlc.LibVlcUtil
|
||||
import java.io.File
|
||||
@@ -174,6 +168,17 @@ class MainViewModel @Inject constructor(
|
||||
*/
|
||||
private var bSelectPauseTrace = false
|
||||
|
||||
/**
|
||||
* 是不是开启测距
|
||||
*/
|
||||
private var bMeasuringTool = false
|
||||
|
||||
/**
|
||||
* 测量类型
|
||||
*/
|
||||
var measuringType: MeasureLayerHandler.MEASURE_TYPE =
|
||||
MeasureLayerHandler.MEASURE_TYPE.DISTANCE
|
||||
|
||||
var linkIdCache = ""
|
||||
|
||||
private var lastNiLocaion: NiLocation? = null
|
||||
@@ -219,12 +224,16 @@ class MainViewModel @Inject constructor(
|
||||
object : OnGeoPointClickListener {
|
||||
override fun onMapClick(tag: String, point: GeoPoint) {
|
||||
if (tag == TAG) {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
//线选择状态
|
||||
if (bSelectRoad) {
|
||||
captureLink(point)
|
||||
} else {
|
||||
captureItem(point)
|
||||
if (bMeasuringTool) {
|
||||
mapController.measureLayerHandler.addPoint(measuringType, point)
|
||||
} else {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
//线选择状态
|
||||
if (bSelectRoad) {
|
||||
captureLink(point)
|
||||
} else {
|
||||
captureItem(point)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1028,12 +1037,12 @@ class MainViewModel @Inject constructor(
|
||||
val nextNiLocation =
|
||||
mapController.markerHandle.getNILocation(currentIndexNiLocation + 1)
|
||||
if (nextNiLocation != null && niLocation != null) {
|
||||
var nilocationDisTime =
|
||||
var niLocationDisTime =
|
||||
nextNiLocation.timeStamp.toLong() - niLocation.timeStamp.toLong()
|
||||
disTime = if (nilocationDisTime < 1000) {
|
||||
disTime = if (niLocationDisTime < 1000) {
|
||||
1000
|
||||
} else {
|
||||
nilocationDisTime
|
||||
niLocationDisTime
|
||||
}
|
||||
showMarker(mapController.mMapView.context, nextNiLocation)
|
||||
currentIndexNiLocation += 1
|
||||
@@ -1053,5 +1062,45 @@ class MainViewModel @Inject constructor(
|
||||
fun cancelTrace() {
|
||||
timer?.cancel()
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 开启测量工具
|
||||
*/
|
||||
fun setMeasuringToolEnable(b: Boolean) {
|
||||
bMeasuringTool = b
|
||||
mapController.measureLayerHandler.clear()
|
||||
}
|
||||
|
||||
/**
|
||||
* 测量打点
|
||||
*/
|
||||
fun addPointForMeasuringTool() {
|
||||
mapController.measureLayerHandler.addPoint(measuringType)
|
||||
}
|
||||
|
||||
/**
|
||||
* 测距回退点
|
||||
*/
|
||||
fun backPointForMeasuringTool() {
|
||||
mapController.measureLayerHandler.backspacePoint()
|
||||
}
|
||||
|
||||
/**
|
||||
* 重绘
|
||||
*/
|
||||
fun resetMeasuringTool() {
|
||||
mapController.measureLayerHandler.clear()
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置测量类型 0:距离 2:面积 3:角度
|
||||
*/
|
||||
fun setMeasuringToolType(type: MeasureLayerHandler.MEASURE_TYPE) {
|
||||
if(measuringType != type) {
|
||||
measuringType = type
|
||||
mapController.measureLayerHandler.clear()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.navinfo.omqs.ui.fragment.tasklink
|
||||
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@@ -38,7 +37,7 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
|
||||
|
||||
arguments?.let {
|
||||
val id = it.getString("TaskLinkId")
|
||||
if (id != null && id.isNotEmpty()){
|
||||
if (id != null && id.isNotEmpty()) {
|
||||
viewModel.initData(id)
|
||||
}
|
||||
}
|
||||
@@ -97,11 +96,11 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
|
||||
/**
|
||||
* 线长度
|
||||
*/
|
||||
mapController.measureLayerHandler.lineLengthLiveData.observe(viewLifecycleOwner) {
|
||||
mapController.measureLayerHandler.measureValueLiveData.observe(viewLifecycleOwner) {
|
||||
binding.taskLinkLength.text = "${it}米"
|
||||
}
|
||||
mapController.measureLayerHandler.tempLineDistanceLiveData.observe(viewLifecycleOwner) {
|
||||
(activity as MainActivity).setHomeCenterText(it)
|
||||
mapController.measureLayerHandler.tempMeasureValueLiveData.observe(viewLifecycleOwner) {
|
||||
(activity as MainActivity).setHomeCenterText("${it.valueString}${it.unit}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,7 +158,7 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
|
||||
binding.taskLinkClear -> {
|
||||
viewModel.clearLink()
|
||||
}
|
||||
binding.taskLinkBarDelete ->{
|
||||
binding.taskLinkBarDelete -> {
|
||||
viewModel.deleteData(requireContext())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
package com.navinfo.omqs.ui.fragment.tasklink
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Build
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
@@ -13,18 +10,15 @@ 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.map.NIMapController
|
||||
import com.navinfo.collect.library.map.handler.MeasureLayerHandler
|
||||
import com.navinfo.collect.library.utils.GeometryTools
|
||||
import com.navinfo.omqs.Constant
|
||||
import com.navinfo.omqs.ui.dialog.FirstDialog
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import io.realm.Realm
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.bson.codecs.UuidCodec
|
||||
import org.bson.internal.UuidHelper
|
||||
import org.oscim.core.GeoPoint
|
||||
import java.util.UUID
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -136,7 +130,7 @@ class TaskLinkViewModel @Inject constructor(
|
||||
* 编辑点
|
||||
*/
|
||||
fun addPoint() {
|
||||
mapController.measureLayerHandler.drawLineOrPolygon(false)
|
||||
mapController.measureLayerHandler.addPoint(MeasureLayerHandler.MEASURE_TYPE.DISTANCE)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -198,7 +192,7 @@ class TaskLinkViewModel @Inject constructor(
|
||||
if (hadLinkDvoBean != null) {
|
||||
hadLinkDvoBean!!.taskId = liveDataTaskBean.value!!.id
|
||||
hadLinkDvoBean!!.length =
|
||||
mapController.measureLayerHandler.lineLengthLiveData.value!!
|
||||
mapController.measureLayerHandler.measureValueLiveData.value!!.value
|
||||
hadLinkDvoBean!!.geometry =
|
||||
GeometryTools.getLineString(mapController.measureLayerHandler.mPathLayer.points)
|
||||
hadLinkDvoBean!!.linkInfo = LinkInfoBean(
|
||||
@@ -218,7 +212,7 @@ class TaskLinkViewModel @Inject constructor(
|
||||
taskId = liveDataTaskBean.value!!.id,
|
||||
linkPid = UUID.randomUUID().toString(),
|
||||
linkStatus = 3,
|
||||
length = mapController.measureLayerHandler.lineLengthLiveData.value!!,
|
||||
length = mapController.measureLayerHandler.measureValueLiveData.value!!.value,
|
||||
geometry = GeometryTools.getLineString(mapController.measureLayerHandler.mPathLayer.points),
|
||||
linkInfo = LinkInfoBean(
|
||||
kind = liveDataSelectKind.value!!.type,
|
||||
@@ -256,7 +250,7 @@ class TaskLinkViewModel @Inject constructor(
|
||||
* 绘制线的时候回退点
|
||||
*/
|
||||
fun removeLinkLastPoint() {
|
||||
mapController.measureLayerHandler.drawLineBackspace()
|
||||
mapController.measureLayerHandler.backspacePoint()
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user