Conflicts:
	app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt
	app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
	collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java
	vtm
This commit is contained in:
qiji4215
2023-08-11 10:05:35 +08:00
15 changed files with 569 additions and 286 deletions

View File

@@ -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
@@ -21,6 +22,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.tabs.TabLayout
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.map.handler.MeasureLayerHandler
import com.navinfo.omqs.Constant
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ImportConfig
@@ -447,10 +449,12 @@ class MainActivity : BaseActivity() {
Toast.makeText(this, "输入格式不正确", Toast.LENGTH_SHORT).show()
}
}
dialog.dismiss()
}
inputDialog.show()
}
override fun onStart() {
super.onStart()
@@ -508,10 +512,10 @@ class MainActivity : BaseActivity() {
}
/**
* 点击计算
* 点击测速
*/
fun onClickCalcDisance() {
fun onClickCalcDistance() {
measuringToolOn()
}
/**

View File

@@ -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.collect.library.utils.RealmDBParamUtils
@@ -60,10 +56,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
@@ -175,6 +169,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
@@ -220,12 +225,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)
}
}
}
}
@@ -586,7 +595,6 @@ class MainViewModel @Inject constructor(
* 点击我的位置,回到我的位置
*/
fun onClickLocationButton() {
mapController.markerHandle.removeMarker("location")
mapController.locationLayerHandler.animateToCurrentPosition()
}
@@ -1032,12 +1040,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
@@ -1058,6 +1066,46 @@ class MainViewModel @Inject constructor(
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()
}
}
fun click2Dor3D(){
viewModelScope.launch(Dispatchers.IO) {
Log.e(

View File

@@ -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) {
binding.taskLinkLength.text = "${it}"
mapController.measureLayerHandler.measureValueLiveData.observe(viewLifecycleOwner) {
binding.taskLinkLength.text = "${it.valueString}${it.unit}"
}
mapController.measureLayerHandler.tempLineDistanceLiveData.observe(viewLifecycleOwner) {
(activity as MainActivity).setHomeCenterText(it)
mapController.measureLayerHandler.tempMeasureValueLiveData.observe(viewLifecycleOwner) {
(activity as MainActivity).setHomeCenterText("${it.valueString}${it.unit}")
}
}
@@ -111,6 +110,7 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
* 显示地图准星
*/
activity?.let {
(activity as MainActivity).measuringToolOff()
(activity as MainActivity).setHomeCenterVisibility(View.VISIBLE)
}
}
@@ -159,7 +159,7 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
binding.taskLinkClear -> {
viewModel.clearLink()
}
binding.taskLinkBarDelete ->{
binding.taskLinkBarDelete -> {
viewModel.deleteData(requireContext())
}
}

View File

@@ -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()
}
/**
@@ -302,9 +296,11 @@ class TaskLinkViewModel @Inject constructor(
if (task != null) {
liveDataTaskBean.postValue(realm.copyFromRealm(task))
}
hadLinkDvoBean = realm.copyFromRealm(objects)
withContext(Dispatchers.Main) {
mapController.measureLayerHandler.initPathLine(hadLinkDvoBean?.geometry!!)
if(objects != null) {
hadLinkDvoBean = realm.copyFromRealm(objects)
withContext(Dispatchers.Main) {
mapController.measureLayerHandler.initPathLine(hadLinkDvoBean?.geometry!!)
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 B

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_rect_white_press_6dp_bg" android:state_selected="true"></item>
<item android:drawable="@drawable/shape_rect_white_press_6dp_bg" android:state_pressed="true"></item>
<item android:drawable="@drawable/shape_rect_white_6dp_bg" />
</selector>

View File

@@ -7,7 +7,7 @@
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
<stroke android:width="1dp" android:color="@color/blue"/>
<solid android:color="#2632335e" />
</shape>

View File

@@ -101,7 +101,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/top_right_drawer_btns_mr"
app:constraint_referenced_ids="main_activity_note,main_activity_task_line,main_activity_serach,main_activity_2d_3d,main_activity_camera,main_activity_trace,main_activity_calc_disance,main_activity_menu"
app:constraint_referenced_ids="main_activity_note,main_activity_task_line,main_activity_serach,main_activity_2d_3d,main_activity_camera,main_activity_trace,main_activity_calc_distance,main_activity_menu"
app:flow_horizontalGap="6dp"
app:flow_wrapMode="aligned"
app:layout_constraintRight_toLeftOf="@id/main_activity_right_fragment"
@@ -112,7 +112,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
app:constraint_referenced_ids="main_activity_serach,main_activity_2d_3d,main_activity_camera,main_activity_trace,main_activity_note,main_activity_task_line,main_activity_calc_disance" />
app:constraint_referenced_ids="main_activity_serach,main_activity_2d_3d,main_activity_camera,main_activity_trace,main_activity_note,main_activity_task_line,main_activity_calc_distance" />
<ImageButton
android:id="@+id/main_activity_serach"
@@ -139,9 +139,9 @@
android:src="@drawable/icon_trace" />
<ImageButton
android:id="@+id/main_activity_calc_disance"
android:id="@+id/main_activity_calc_distance"
style="@style/top_right_drawer_btns_style"
android:onClick="@{()->mainActivity.onClickCalcDisance()}"
android:onClick="@{()->mainActivity.onClickCalcDistance()}"
android:src="@drawable/icon_calc_disance" />
<ImageButton
@@ -164,6 +164,15 @@
android:elevation="2dp"
android:onClick="@{()->mainActivity.onClickMenu()}" />
<include
android:id="@+id/main_activity_measuring_tool"
layout="@layout/main_measuring_tool"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:visibility="gone"
app:layout_constraintRight_toRightOf="@id/main_activity_calc_distance"
app:layout_constraintTop_toBottomOf="@id/main_activity_flow" />
<androidx.constraintlayout.widget.Barrier
android:layout_width="wrap_content"
@@ -333,12 +342,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/five"
app:constraint_referenced_ids="main_activity_snapshot_finish,main_activity_trace_snapshot_points,main_activity_snapshot_media_flag,main_activity_snapshot_rewind,main_activity_snapshot_pause,main_activity_snapshot_next,main_activity_menu_indoor_group"
app:constraint_referenced_ids="main_activity_snapshot_finish,main_activity_trace_snapshot_points,main_activity_snapshot_rewind,main_activity_snapshot_pause,main_activity_snapshot_next,main_activity_menu_indoor_group"
app:flow_horizontalGap="6dp"
app:flow_wrapMode="aligned"
app:layout_constraintBottom_toTopOf="@id/main_activity_bottom_sheet"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/main_activity_bottom_sheet" />
app:layout_constraintStart_toStartOf="parent" />
<androidx.constraintlayout.widget.Group
android:id="@+id/main_activity_menu_indoor_group"
@@ -359,12 +368,12 @@
android:onClick="@{()->mainActivity.tracePointsOnclick()}"
android:src="@drawable/map_trace_select_point" />
<!-- <ImageButton
android:id="@+id/main_activity_snapshot_media_flag"
style="@style/top_right_drawer_btns_style"
android:visibility="gone"
android:onClick="@{()->mainActivity.mediaFlagOnclick()}"
android:src="@drawable/map_trace_mediaflag" />-->
<!-- <ImageButton
android:id="@+id/main_activity_snapshot_media_flag"
style="@style/top_right_drawer_btns_style"
android:visibility="gone"
android:onClick="@{()->mainActivity.mediaFlagOnclick()}"
android:src="@drawable/map_trace_mediaflag" />-->
<ImageButton
android:id="@+id/main_activity_snapshot_rewind"

View File

@@ -3,31 +3,48 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_rect_white_6dp_bg"
android:clickable="true"
android:gravity="center"
android:orientation="horizontal">
android:orientation="horizontal"
android:padding="5dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/measuring_tool_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="24dp"
android:background="@drawable/shape_bg_blue_bg_4_radius"
android:textColor="@color/white" />
android:gravity="center"
android:minWidth="65dp"
android:text="0"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/measuring_tool_value_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/blue" />
android:text="米"
android:textColor="@color/blue"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/measuring_tool_select_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:gravity="center"
android:orientation="vertical">
android:orientation="vertical"
android:paddingLeft="6dp"
android:paddingRight="6dp">
<ImageView
android:layout_width="24dp"
@@ -43,10 +60,16 @@
</LinearLayout>
<LinearLayout
android:id="@+id/measuring_tool_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/selector_default_button_white_bg"
android:gravity="center"
android:orientation="vertical">
android:orientation="vertical"
android:paddingLeft="6dp"
android:paddingRight="6dp">
<ImageView
android:layout_width="24dp"
@@ -62,8 +85,12 @@
</LinearLayout>
<LinearLayout
android:id="@+id/measuring_tool_area"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/selector_default_button_white_bg"
android:gravity="center"
android:orientation="vertical">
@@ -81,8 +108,12 @@
</LinearLayout>
<LinearLayout
android:id="@+id/measuring_tool_angle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/selector_default_button_white_bg"
android:gravity="center"
android:orientation="vertical">
@@ -100,20 +131,36 @@
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/measuring_tool_backspace"
android:layout_width="80dp"
android:layout_height="32dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/shape_rect_transparent_blue_6dp_bg"
android:drawableLeft="@drawable/baseline_arrow_left_24"
android:drawablePadding="-15dp"
android:gravity="center"
android:text="上一步"
android:textColor="@color/blue"
android:textSize="12sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/baseline_arrow_left_24"
android:id="@+id/measuring_tool_reset"
android:layout_width="80dp"
android:layout_height="32dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/shape_rect_transparent_blue_6dp_bg"
android:gravity="center"
android:text="重"
android:text="重"
android:textColor="@color/blue"
android:textSize="12sp" />
<ImageView
android:id="@+id/measuring_tool_close"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/measuring_tool_close" />
</LinearLayout>