Commit 2c0c90f1 authored by 马乐's avatar 马乐

1.解决地图异步加载车辆图片被遮挡问题

parent 7552d1f8
...@@ -2,8 +2,6 @@ package com.waytous.anticollision.ui ...@@ -2,8 +2,6 @@ package com.waytous.anticollision.ui
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.asynclayoutinflater.view.AsyncLayoutInflater import androidx.asynclayoutinflater.view.AsyncLayoutInflater
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
...@@ -18,9 +16,9 @@ import com.mapbox.maps.Style ...@@ -18,9 +16,9 @@ import com.mapbox.maps.Style
import com.mapbox.maps.ViewAnnotationAnchor import com.mapbox.maps.ViewAnnotationAnchor
import com.mapbox.maps.extension.style.layers.properties.generated.IconAnchor import com.mapbox.maps.extension.style.layers.properties.generated.IconAnchor
import com.mapbox.maps.extension.style.style import com.mapbox.maps.extension.style.style
import com.mapbox.maps.plugin.annotation.AnnotationConfig
import com.mapbox.maps.plugin.annotation.AnnotationPlugin import com.mapbox.maps.plugin.annotation.AnnotationPlugin
import com.mapbox.maps.plugin.annotation.annotations import com.mapbox.maps.plugin.annotation.annotations
import com.mapbox.maps.plugin.annotation.generated.PointAnnotation
import com.mapbox.maps.plugin.annotation.generated.PointAnnotationManager import com.mapbox.maps.plugin.annotation.generated.PointAnnotationManager
import com.mapbox.maps.plugin.annotation.generated.PointAnnotationOptions import com.mapbox.maps.plugin.annotation.generated.PointAnnotationOptions
import com.mapbox.maps.plugin.annotation.generated.createPointAnnotationManager import com.mapbox.maps.plugin.annotation.generated.createPointAnnotationManager
...@@ -35,6 +33,10 @@ import com.waytous.anticollision.databinding.LayoutMapBoxBinding ...@@ -35,6 +33,10 @@ import com.waytous.anticollision.databinding.LayoutMapBoxBinding
import com.waytous.anticollision.databinding.OtherVehicleViewAnnotationLayoutBinding import com.waytous.anticollision.databinding.OtherVehicleViewAnnotationLayoutBinding
import com.waytous.anticollision.repository.MainRepository import com.waytous.anticollision.repository.MainRepository
import com.waytous.anticollision.utils.BitmapUtils import com.waytous.anticollision.utils.BitmapUtils
import com.waytous.anticollision.utils.LATITUDE
import com.waytous.anticollision.utils.LONGITUDE
import com.waytous.anticollision.utils.MY_MAP_BOX_STYLE
import com.waytous.anticollision.utils.TRUCK_PATH_LAYER
import com.waytous.anticollision.utils.addBarricadeLineLayer import com.waytous.anticollision.utils.addBarricadeLineLayer
import com.waytous.anticollision.utils.addBarricadeSource import com.waytous.anticollision.utils.addBarricadeSource
import com.waytous.anticollision.utils.addDiggingWorkAreaFillLayer import com.waytous.anticollision.utils.addDiggingWorkAreaFillLayer
...@@ -70,10 +72,9 @@ import com.waytous.anticollision.utils.addTruckPathSource ...@@ -70,10 +72,9 @@ import com.waytous.anticollision.utils.addTruckPathSource
import com.waytous.anticollision.utils.addWetAreaFillLayer import com.waytous.anticollision.utils.addWetAreaFillLayer
import com.waytous.anticollision.utils.addWetAreaSource import com.waytous.anticollision.utils.addWetAreaSource
import com.waytous.anticollision.utils.addWetAreaSymbolLayer import com.waytous.anticollision.utils.addWetAreaSymbolLayer
import com.waytous.anticollision.utils.adjustLayerOrder
import com.waytous.anticollision.vo.VehicleAnnotation import com.waytous.anticollision.vo.VehicleAnnotation
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.last import kotlinx.coroutines.flow.last
import kotlinx.coroutines.flow.single
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.math.BigDecimal import java.math.BigDecimal
...@@ -99,21 +100,15 @@ open class BaseFragment : Fragment() { ...@@ -99,21 +100,15 @@ open class BaseFragment : Fragment() {
lateinit var mapboxMap: MapboxMap lateinit var mapboxMap: MapboxMap
private lateinit var viewAnnotation: View
private lateinit var annotationPlugin: AnnotationPlugin
private lateinit var viewAnnotationManager: ViewAnnotationManager private lateinit var viewAnnotationManager: ViewAnnotationManager
private lateinit var pointAnnotationManager: PointAnnotationManager private lateinit var pointAnnotationManager: PointAnnotationManager
private lateinit var pointAnnotation: PointAnnotation
private val cameraOptions: CameraOptions by lazy { private val cameraOptions: CameraOptions by lazy {
CameraOptions.Builder().center( CameraOptions.Builder().center(
Point.fromLngLat( Point.fromLngLat(
MainViewModel.LONGITUDE, LONGITUDE,
MainViewModel.LATITUDE LATITUDE
) )
).zoom(14.0).build() ).zoom(14.0).build()
} }
...@@ -150,6 +145,7 @@ open class BaseFragment : Fragment() { ...@@ -150,6 +145,7 @@ open class BaseFragment : Fragment() {
} }
fun setupMapBox() { fun setupMapBox() {
LogUtils.d("setupMapBox")
layoutMapBoxBinding.mapView.run { layoutMapBoxBinding.mapView.run {
logo.enabled = false logo.enabled = false
compass.enabled = false compass.enabled = false
...@@ -183,11 +179,9 @@ open class BaseFragment : Fragment() { ...@@ -183,11 +179,9 @@ open class BaseFragment : Fragment() {
} }
} }
mapboxMap.loadStyle(style(MainViewModel.MY_MAP_BOX_STYLE) { mapboxMap.loadStyle(style(MY_MAP_BOX_STYLE) {
}) { }) {
initAnnotationManager()
setupStyle(it) setupStyle(it)
addTempAnnotations()
} }
} }
...@@ -253,6 +247,9 @@ open class BaseFragment : Fragment() { ...@@ -253,6 +247,9 @@ open class BaseFragment : Fragment() {
} }
style.addTruckPathSource() style.addTruckPathSource()
style.addTruckPathLineLayer() style.addTruckPathLineLayer()
style.adjustLayerOrder()
initAnnotationManager()
addTempAnnotations()
} }
} }
} }
...@@ -260,7 +257,7 @@ open class BaseFragment : Fragment() { ...@@ -260,7 +257,7 @@ open class BaseFragment : Fragment() {
fun addTempAnnotations() { fun addTempAnnotations() {
val otherAnnotation = VehicleAnnotation( val otherAnnotation = VehicleAnnotation(
"KK-01", 36, 25, "KK-01", 36, 25,
Point.fromLngLat(MainViewModel.LONGITUDE, MainViewModel.LATITUDE), true Point.fromLngLat(LONGITUDE, LATITUDE), true
) )
updateCurrentVehicleAnnotation(otherAnnotation) updateCurrentVehicleAnnotation(otherAnnotation)
val otherAnnotation1 = val otherAnnotation1 =
...@@ -272,9 +269,11 @@ open class BaseFragment : Fragment() { ...@@ -272,9 +269,11 @@ open class BaseFragment : Fragment() {
} }
private fun initAnnotationManager() { private fun initAnnotationManager() {
annotationPlugin = layoutMapBoxBinding.mapView.annotations
viewAnnotationManager = layoutMapBoxBinding.mapView.viewAnnotationManager viewAnnotationManager = layoutMapBoxBinding.mapView.viewAnnotationManager
pointAnnotationManager = annotationPlugin.createPointAnnotationManager() pointAnnotationManager =
layoutMapBoxBinding.mapView.annotations.createPointAnnotationManager(
AnnotationConfig(TRUCK_PATH_LAYER)
)
} }
fun updateCurrentVehicleAnnotation(otherAnnotation: VehicleAnnotation) { fun updateCurrentVehicleAnnotation(otherAnnotation: VehicleAnnotation) {
......
...@@ -7,6 +7,8 @@ import androidx.lifecycle.viewmodel.CreationExtras ...@@ -7,6 +7,8 @@ import androidx.lifecycle.viewmodel.CreationExtras
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import com.mapbox.geojson.Point import com.mapbox.geojson.Point
import com.waytous.anticollision.repository.MainRepository import com.waytous.anticollision.repository.MainRepository
import com.waytous.anticollision.utils.LATITUDE
import com.waytous.anticollision.utils.LONGITUDE
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
import java.math.BigDecimal import java.math.BigDecimal
...@@ -95,10 +97,7 @@ class MainViewModel @Inject constructor(private val mainRepository: MainReposito ...@@ -95,10 +97,7 @@ class MainViewModel @Inject constructor(private val mainRepository: MainReposito
fun runnableAreaSource() = flowOf( fun runnableAreaSource() = flowOf(
mainRepository.localRunnableAreaVersion(), mainRepository.localRunnableAreaVersion(),
mainRepository.remoteRunnableAreaVersion() mainRepository.remoteRunnableAreaVersion()
).onStart { ).flattenMerge()
LogUtils.dTag("MainViewModel","runnableAreaSource start")
}
.flattenMerge()
.transformWhile { .transformWhile {
emit(it.mapDataSource) emit(it.mapDataSource)
!it.abort !it.abort
...@@ -196,64 +195,6 @@ class MainViewModel @Inject constructor(private val mainRepository: MainReposito ...@@ -196,64 +195,6 @@ class MainViewModel @Inject constructor(private val mainRepository: MainReposito
emit("") emit("")
} }
companion object {
const val MY_MAP_BOX_STYLE = "asset://style.json"
const val DUMP_AREA_SOURCE = "dumpAreaSource"
const val DUMP_AREA_LAYER = "dumpAreaLayer"
const val DUMP_AREA_TEXT_LAYER = "dumpAreaTextLayer"
const val OBSTACLES_SOURCE = "obstaclesSource"
const val OBSTACLES_LAYER = "obstaclesLayer"
const val OBSTACLES_TEXT_LAYER = "obstaclesTextLayer"
const val ELECTRONIC_FENCE_SOURCE = "electronicFenceSource"
const val ELECTRONIC_FENCE_LAYER = "electronicFenceLayer"
const val ELECTRONIC_FENCE_TEXT_LAYER = "electronicFenceTextLayer"
const val WET_AREA_SOURCE = "wetAreaSource"
const val WET_AREA_LAYER = "wetAreaLayer"
const val WET_AREA_TEXT_LAYER = "wetAreaTextLayer"
const val LANE_NODE_SOURCE = "laneNodeSource"
const val LANE_NODE_LAYER = "laneNodeLayer"
const val LANE_NODE_TEXT_LAYER = "laneNodeTextLayer"
const val LANE_SOURCE = "laneSource"
const val LANE_LAYER = "laneLayer"
const val LANE_TEXT_LAYER = "laneTextLayer"
const val RUNNABLE_AREA_SOURCE = "runnableAreaSource"
const val RUNNABLE_AREA_LAYER = "runnableAreaLayer"
const val RUNNABLE_AREA_TEXT_LAYER = "runnableAreaTextLayer"
const val DIGGING_WORK_AREA_SOURCE = "diggingWorkAreaSource"
const val DIGGING_WORK_AREA_LAYER = "diggingWorkAreaLayer"
const val DIGGING_WORK_AREA_TEXT_LAYER = "diggingWorkAreaTextLayer"
const val BARRICADE_SOURCE = "barricadeSource"
const val BARRICADE_LAYER = "barricadeLayer"
const val BARRICADE_TEXT_LAYER = "barricadeTextLayer"
const val STATION_AREA_SOURCE = "stationAreaSource"
const val STATION_AREA_LAYER = "stationAreaLayer"
const val STATION_AREA_TEXT_LAYER = "stationAreaTextLayer"
const val STATIC_OBJECTS_SOURCE = "staticObjectsSource"
const val STATIC_OBJECTS_LAYER = "staticObjectsLayer"
const val STATIC_OBJECTS_TEXT_LAYER = "staticObjectsTextLayer"
const val PARK_SPOT_SOURCE = "parkSpotSource"
const val PARK_SPOT_LAYER = "parkSpotLayer"
const val PARK_SPOT_TEXT_LAYER = "parkSpotTextLayer"
const val LONGITUDE = 119.7622539014
const val LATITUDE = 49.3795031825
const val ZOOM = 16.0
}
class MainViewModelFactory(private val mainRepository: MainRepository) : class MainViewModelFactory(private val mainRepository: MainRepository) :
ViewModelProvider.Factory { ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
......
...@@ -23,6 +23,8 @@ import com.mapbox.maps.viewannotation.viewAnnotationOptions ...@@ -23,6 +23,8 @@ import com.mapbox.maps.viewannotation.viewAnnotationOptions
import com.waytous.anticollision.R import com.waytous.anticollision.R
import com.waytous.anticollision.databinding.CurrentVehicleViewAnnotationLayoutBinding import com.waytous.anticollision.databinding.CurrentVehicleViewAnnotationLayoutBinding
import com.waytous.anticollision.utils.BitmapUtils import com.waytous.anticollision.utils.BitmapUtils
import com.waytous.anticollision.utils.LATITUDE
import com.waytous.anticollision.utils.LONGITUDE
/** /**
...@@ -77,34 +79,4 @@ class MapBoxLayout(private val context: Context,private val mapView:MapView){ ...@@ -77,34 +79,4 @@ class MapBoxLayout(private val context: Context,private val mapView:MapView){
}.toJson()) }.toJson())
} }
fun updateRoundTrucks(vararg points:Point){
points.forEach {
}
}
@SuppressLint("SetTextI18n")
private fun prepareViewAnnotation() {
viewAnnotation = viewAnnotationManager.addViewAnnotation(
resId = R.layout.current_vehicle_view_annotation_layout,
options = viewAnnotationOptions {
geometry(Point.fromLngLat(MainViewModel.LONGITUDE,MainViewModel.LATITUDE))
associatedFeatureId(pointAnnotation.featureIdentifier)
anchor(ViewAnnotationAnchor.BOTTOM)
offsetY((pointAnnotation.iconImageBitmap?.height!!).toInt())
}
)
CurrentVehicleViewAnnotationLayoutBinding.bind(viewAnnotation)
}
private fun prepareAnnotationMarker(mapView: MapView, iconBitmap: Bitmap) {
val annotationPlugin = mapView.annotations
val pointAnnotationOptions: PointAnnotationOptions = PointAnnotationOptions()
.withPoint(Point.fromLngLat(MainViewModel.LONGITUDE,MainViewModel.LATITUDE))
.withIconImage(iconBitmap)
.withIconAnchor(IconAnchor.BOTTOM)
pointAnnotationManager = annotationPlugin.createPointAnnotationManager()
pointAnnotation = pointAnnotationManager.create(pointAnnotationOptions)
}
} }
\ No newline at end of file
...@@ -51,6 +51,7 @@ import com.waytous.anticollision.databinding.FragmentVideoHomeBinding ...@@ -51,6 +51,7 @@ import com.waytous.anticollision.databinding.FragmentVideoHomeBinding
import com.waytous.anticollision.ui.MainViewModel import com.waytous.anticollision.ui.MainViewModel
import com.waytous.anticollision.ui.view.MoreFeaturesPopup import com.waytous.anticollision.ui.view.MoreFeaturesPopup
import com.waytous.anticollision.ui.view.WorkStatusEditPopup import com.waytous.anticollision.ui.view.WorkStatusEditPopup
import com.waytous.anticollision.utils.MY_MAP_BOX_STYLE
import com.waytous.anticollision.utils.getBitmapFromVectorDrawable import com.waytous.anticollision.utils.getBitmapFromVectorDrawable
import com.waytous.anticollision.utils.setTextSize import com.waytous.anticollision.utils.setTextSize
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -145,7 +146,7 @@ class VideoHomeFragment : Fragment() { ...@@ -145,7 +146,7 @@ class VideoHomeFragment : Fragment() {
val mapData = ApiService.create().dumpAreaVersion("-1") val mapData = ApiService.create().dumpAreaVersion("-1")
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.CREATED){ viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.CREATED){
mapView.getMapboxMap().loadStyle( mapView.getMapboxMap().loadStyle(
style(styleUri = MainViewModel.MY_MAP_BOX_STYLE) { style(styleUri = MY_MAP_BOX_STYLE) {
+geoJsonSource(DUMP_AREA_SOURCE) { +geoJsonSource(DUMP_AREA_SOURCE) {
data(mapData?.geojson!!) data(mapData?.geojson!!)
LogUtils.d(get("name").literalValue) LogUtils.d(get("name").literalValue)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment