diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt index fbeed81c..3460f39c 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -324,7 +324,7 @@ class ImportOMDBHelper @AssistedInject constructor( } }else if(renderEntity.code == DataCodeEnum.OMDB_RAMP.code){ /*匝道*/ - var formWay = renderEntity.properties["FORM_OF_WAY"] + var formWay = renderEntity.properties["formOfWay"] if(formWay!=null){ when (formWay) { "93"-> renderEntity.code = DataCodeEnum.OMDB_RAMP_1.code @@ -338,7 +338,7 @@ class ImportOMDBHelper @AssistedInject constructor( } }else if(renderEntity.code == DataCodeEnum.OMDB_LINK_FORM1.code){ /*道路形态1*/ - var formWay = renderEntity.properties["FORM_OF_WAY"] + var formWay = renderEntity.properties["formOfWay"] if(formWay!=null){ when (formWay) { "35"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM1_1.code @@ -348,7 +348,7 @@ class ImportOMDBHelper @AssistedInject constructor( } }else if(renderEntity.code == DataCodeEnum.OMDB_LINK_FORM2.code){ /*道路形态2*/ - var formWay = renderEntity.properties["FORM_OF_WAY"] + var formWay = renderEntity.properties["formOfWay"] if(formWay!=null){ when (formWay) { "10"-> renderEntity.code = DataCodeEnum.OMDB_LINK_FORM2_1.code diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt index 3c714088..de02ecfc 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainActivity.kt @@ -38,6 +38,7 @@ import com.navinfo.omqs.http.offlinemapdownload.OfflineMapDownloadManager import com.navinfo.omqs.tools.LayerConfigUtils import com.navinfo.omqs.ui.activity.BaseActivity import com.navinfo.omqs.ui.fragment.console.ConsoleFragment +import com.navinfo.omqs.ui.fragment.itemlist.ItemListFragment import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapFragment import com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListFragment import com.navinfo.omqs.ui.fragment.signMoreInfo.SignMoreInfoFragment @@ -390,6 +391,25 @@ class MainActivity : BaseActivity() { } } + viewModel.liveDataItemList.observe(this) { + if (leftFragment == null || leftFragment !is ItemListFragment) { + leftFragment = ItemListFragment { + binding.mainActivityLeftFragment.visibility = View.GONE + supportFragmentManager.beginTransaction().remove(leftFragment!!).commit() + leftFragment = null + null + } + binding.mainActivityLeftFragment.visibility = View.VISIBLE + supportFragmentManager.beginTransaction() + .replace(R.id.main_activity_left_fragment, leftFragment!!) + .commit() + } else { + supportFragmentManager.beginTransaction() + .show(leftFragment!!) + .commit() + } + } + lifecycleScope.launch { // 初始化地图图层控制接收器 FlowEventBus.subscribe>( @@ -416,6 +436,9 @@ class MainActivity : BaseActivity() { supportFragmentManager.beginTransaction() .add(R.id.console_fragment_layout, ConsoleFragment()).commit() } + + binding.mainActivityCloseLine.isSelected = viewModel.isHighRoad() + initMeasuringTool() } @@ -675,6 +698,13 @@ class MainActivity : BaseActivity() { viewModel.click2Dor3D() } + /** + * 刷新地图 + */ + fun refrushOnclick(view: View) { + mapController.layerManagerHandler.updateOMDBVectorTileLayer() + } + /** * zoomin */ @@ -754,6 +784,16 @@ class MainActivity : BaseActivity() { binding.mainActivitySelectLine.isSelected = viewModel.isSelectRoad() } + /** + * 点击线高亮 + */ + fun openOrCloseLineOnclick() { + viewModel.setHighRoad(!viewModel.isHighRoad()) + binding.mainActivityCloseLine.isSelected = viewModel.isHighRoad() + mapController.lineHandler.taskMarkerLayerEnable(viewModel.isHighRoad()) + } + + /** * 点击线选择 */ @@ -990,7 +1030,7 @@ class MainActivity : BaseActivity() { */ private fun showMainActivityBottomSheetGroup() { binding.mainActivityBottomSheetGroup.visibility = View.VISIBLE - mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 10, 60) + mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 256, 60) mapController.mMapView.vtmMap.animator().animateTo( GeoPoint( mapController.mMapView.vtmMap.mapPosition.geoPoint.latitude, @@ -1004,7 +1044,7 @@ class MainActivity : BaseActivity() { */ private fun hideMainActivityBottomSheetGroup() { binding.mainActivityBottomSheetGroup.visibility = View.GONE - mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 10, 0) + mapController.mMapView.setScaleBarLayer(GLViewport.Position.BOTTOM_CENTER, 256, 0) mapController.mMapView.vtmMap.animator().animateTo( GeoPoint( mapController.mMapView.vtmMap.mapPosition.geoPoint.latitude, diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 09dfe890..29cb8f0a 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -112,6 +112,11 @@ class MainViewModel @Inject constructor( */ val liveDataSignMoreInfo = MutableLiveData() + /** + * 捕捉到的itemList + */ + val liveDataItemList = MutableLiveData>() + private var traceTag: String = "TRACE_TAG" /** @@ -156,6 +161,11 @@ class MainViewModel @Inject constructor( */ private var bSelectRoad = false + /** + * 是不是高亮任务线 + */ + private var bHighRoad = true + /** * 是不是选择轨迹点 */ @@ -447,7 +457,7 @@ class MainViewModel @Inject constructor( withContext(Dispatchers.Main) { if (Constant.AUTO_LOCATION) { mapController.mMapView.vtmMap.animator() - .animateTo(GeoPoint(location.longitude, location.latitude)) + .animateTo(GeoPoint(location.latitude, location.longitude)) } } } @@ -468,8 +478,10 @@ class MainViewModel @Inject constructor( ) ) - if (itemList.size > 0) { + if (itemList.size == 1) { liveDataSignMoreInfo.postValue(itemList[0]) + } else { + liveDataItemList.postValue(itemList) } } } @@ -491,9 +503,6 @@ class MainViewModel @Inject constructor( /* val linkList = realmOperateHelper.queryLine( point = point, - ) - -// val linkList = realmOperateHelper.queryLine(point = point, buffer = 2.5, table = "OMDB_LANE_MARK_BOUNDARYTYPE") buffer = 2.5, table = "OMDB_LANE_MARK_BOUNDARYTYPE" )*/ @@ -832,6 +841,21 @@ class MainViewModel @Inject constructor( return bSelectRoad } + /** + * 开启线高亮 + */ + fun setHighRoad(select: Boolean) { + bHighRoad = select + + } + + /** + * 是否开启线高亮 + */ + fun isHighRoad(): Boolean { + return bHighRoad + } + /** * 开启轨迹选择 */ diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemAdapter.kt new file mode 100644 index 00000000..5667a982 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemAdapter.kt @@ -0,0 +1,30 @@ +package com.navinfo.omqs.ui.fragment.itemlist + +import android.view.LayoutInflater +import android.view.ViewGroup +import com.navinfo.collect.library.data.entity.RenderEntity +import com.navinfo.collect.library.enums.DataCodeEnum +import com.navinfo.omqs.databinding.AdapterItemBinding +import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter +import com.navinfo.omqs.ui.other.BaseViewHolder + +class ItemAdapter(private var itemListener: ((Int, RenderEntity) -> Unit?)? = null) : + BaseRecyclerViewAdapter() { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { + val viewBinding = + AdapterItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return BaseViewHolder(viewBinding) + } + + override fun onBindViewHolder(holder: BaseViewHolder, position: Int) { + val binding = holder.viewBinding as AdapterItemBinding + var renderEntity = data[position] + + binding.name.text = DataCodeEnum.findTableNameByCode(renderEntity.code) + binding.root.setOnClickListener { + if (itemListener != null) { + itemListener!!.invoke(position, renderEntity) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemListFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemListFragment.kt new file mode 100644 index 00000000..cfbab4d6 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/itemlist/ItemListFragment.kt @@ -0,0 +1,51 @@ +package com.navinfo.omqs.ui.fragment.itemlist + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.navinfo.omqs.databinding.FragmentItemListBinding +import com.navinfo.omqs.ui.activity.map.MainViewModel +import com.navinfo.omqs.ui.fragment.BaseFragment +import com.navinfo.omqs.ui.widget.RecycleViewDivider +import dagger.hilt.android.AndroidEntryPoint + + +@AndroidEntryPoint +class ItemListFragment(private var backListener: ((ItemListFragment) -> Unit?)? = null) : + BaseFragment() { + private var _binding: FragmentItemListBinding? = null + private val binding get() = _binding!! + private val viewModel by activityViewModels() + private val adapter by lazy { + ItemAdapter { _, data -> + viewModel.showSignMoreInfo(data) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + _binding = FragmentItemListBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + binding.itemListRecyclerview.layoutManager = LinearLayoutManager(requireContext()) + binding.itemListRecyclerview.adapter = adapter + binding.itemListRecyclerview.addItemDecoration( + RecycleViewDivider( + requireContext(), + LinearLayoutManager.VERTICAL + ) + ) + viewModel.liveDataItemList.observe(viewLifecycleOwner) { + adapter.refreshData(it) + } + binding.taskBack.setOnClickListener { + backListener?.invoke(this) + } + } +} diff --git a/app/src/main/res/drawable-xxhdpi/icon_hide_line.png b/app/src/main/res/drawable-xxhdpi/icon_hide_line.png new file mode 100644 index 00000000..70df09a4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_hide_line.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_high_line.png b/app/src/main/res/drawable-xxhdpi/icon_high_line.png new file mode 100644 index 00000000..eefea2d9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_high_line.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_map_refrush.png b/app/src/main/res/drawable-xxhdpi/icon_map_refrush.png new file mode 100644 index 00000000..6d29f47d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_map_refrush.png differ diff --git a/app/src/main/res/drawable/selector_high_road_line_src.xml b/app/src/main/res/drawable/selector_high_road_line_src.xml new file mode 100644 index 00000000..b2eb9ddc --- /dev/null +++ b/app/src/main/res/drawable/selector_high_road_line_src.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 1ea17e10..dad709a6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -224,8 +224,8 @@ android:layout_width="wrap_content" android:layout_height="0dp" android:elevation="4dp" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintRight_toRightOf="parent" + app:layout_constraintBottom_toTopOf="@id/main_activity_bottom_sheet_bg" + app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:navGraph="@navigation/right_fragment_nav_graph" /> @@ -245,6 +245,15 @@ app:layout_constraintBottom_toTopOf="@id/main_activity_bottom_sheet" app:layout_constraintLeft_toLeftOf="@id/main_activity_top_sign_recyclerview" /> + + + app:layout_constraintBottom_toTopOf="@id/main_activity_map_update" + app:layout_constraintRight_toRightOf="@id/main_activity_map_update" /> + + + app:constraint_referenced_ids="main_activity_close_line,main_activity_select_line,main_activity_voice,main_activity_add_new" /> + app:constraint_referenced_ids="main_activity_close_line,main_activity_select_line,main_activity_voice,main_activity_add_new,main_activity_map_update,main_activity_zoom_in,main_activity_zoom_out,main_activity_geometry,main_activity_location" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_item_list.xml b/app/src/main/res/layout/fragment_item_list.xml new file mode 100644 index 00000000..1a043b4c --- /dev/null +++ b/app/src/main/res/layout/fragment_item_list.xml @@ -0,0 +1,41 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_task_manager.xml b/app/src/main/res/layout/fragment_task_manager.xml index f533d173..d2c85a65 100644 --- a/app/src/main/res/layout/fragment_task_manager.xml +++ b/app/src/main/res/layout/fragment_task_manager.xml @@ -1,5 +1,6 @@ - + android:title="版本:ONE_23QE4_V1.3.0_20230817_A" /> diff --git a/collect-library/src/main/assets/editormarker.xml b/collect-library/src/main/assets/editormarker.xml index 3aaf3443..84e1d742 100644 --- a/collect-library/src/main/assets/editormarker.xml +++ b/collect-library/src/main/assets/editormarker.xml @@ -2068,12 +2068,16 @@ - + + + + + + + + - @@ -2179,16 +2183,7 @@ - - - - - - - - + diff --git a/collect-library/src/main/assets/omdb/icon_2013_3.svg b/collect-library/src/main/assets/omdb/icon_2013_3.svg new file mode 100644 index 00000000..585ed2a4 --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_2013_3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2013_4.svg b/collect-library/src/main/assets/omdb/icon_2013_4.svg new file mode 100644 index 00000000..934f848e --- /dev/null +++ b/collect-library/src/main/assets/omdb/icon_2013_4.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/collect-library/src/main/assets/omdb/icon_2204_0.svg b/collect-library/src/main/assets/omdb/icon_2204_0.svg index 5f413949..4d1195e5 100644 --- a/collect-library/src/main/assets/omdb/icon_2204_0.svg +++ b/collect-library/src/main/assets/omdb/icon_2204_0.svg @@ -1 +1 @@ - \ No newline at end of file +环岛 \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt index f8995d5c..539457f9 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/enums/DataCodeEnum.kt @@ -61,6 +61,18 @@ enum class DataCodeEnum(var tableName: String, var code: String) { OMDB_ELECTRONICEYE("电子眼", "4010"), OMDB_TRAFFICLIGHT("交通灯", "4022"), OMDB_LANEINFO("车信", "4601"), - OMDB_LANE_LINK_LG("车道中心线", "5001") + OMDB_LANE_LINK_LG("车道中心线", "5001"); + + companion object { + fun findTableNameByCode(code: String): String? { + for (enumInstance in DataCodeEnum.values()) { + if (enumInstance.code == code) { + return enumInstance.tableName + } + } + return null // 若未找到匹配的 code,则返回 null 或其他适当的默认值 + } + } } + diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt index c652a02b..8776d6e6 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt @@ -60,7 +60,7 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler( .fillColor(context.resources.getColor(R.color.draw_line_red_color)) .fillAlpha(0.5f) .strokeColor(context.resources.getColor(R.color.draw_line_red_color)) - .strokeWidth(2f) + .strokeWidth(3f) .fixed(true).build() ) addLayer(layer, NIMapView.LAYER_GROUPS.VECTOR) @@ -209,6 +209,11 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler( omdbTaskLinkLayer.update() mMapView.vtmMap.updateMap(true) } + + fun taskMarkerLayerEnable(boolean: Boolean){ + omdbTaskLinkLayer.isEnabled = boolean + mMapView.vtmMap.updateMap(true) + } } interface OnTaskLinkItemClickListener : BaseClickListener {