Files
MoGoEagleEye/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt
2023-09-13 18:31:30 +08:00

178 lines
6.2 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.mogo.map
import android.annotation.SuppressLint
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.map.overlay.line.Polyline
import com.mogo.map.overlay.point.Point
import com.mogo.map.overlay.proxy.line.IMapPolylineOverlay
import com.mogo.map.overlay.proxy.point.IMapPointOverlay
import com.mogo.map.overlay.wrapper.line.AMapPolylineWrapper
import com.mogo.map.overlay.wrapper.point.AMapPointWrapper
import com.mogo.map.uicontroller.IMogoMapUIController
import com.mogo.map.utils.ObjectUtils
import com.zhidaoauto.map.sdk.open.marker.BatchMarkerOptions
import com.zhidaoauto.map.sdk.open.marker.MarkerSimpleData
import com.zhidaoauto.map.sdk.open.view.MapAutoView
import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper
import mogo.telematics.pad.MessagePad.TrackedObject
import mogo.yycp.api.proto.SocketDownData
import java.util.function.BiConsumer
/**
* 代理自研AMap
*/
class AMapWrapper(map: MapAutoViewHelper?, mapView: MapAutoView, controller: IMogoMapUIController) :
IMogoMap {
companion object {
private const val TAG = "AMapWrapper"
}
override val uiController: IMogoMapUIController
private var mAMap: MapAutoViewHelper?
private val mMapView: MapAutoView
private var mUiSettings: IMogoUiSettings? = null
override val uiSettings: IMogoUiSettings?
get() {
if (!checkAMap()) {
return null
}
if (mUiSettings == null) {
mUiSettings = AMapUiSettingsWrapper(mAMap)
}
return mUiSettings
}
override fun addPoint(options: Point.Options): IMapPointOverlay? {
if (!checkAMap()) {
return null
}
val markerOptions = ObjectUtils.fromMogo(options, mMapView)
if (markerOptions == null) {
e(TAG, "marker参数为空")
return null
}
val delegate = mAMap!!.addMarker(markerOptions) ?: return null
return AMapPointWrapper(options.id, delegate, mMapView)
}
override fun addLine(options: Polyline.Options): IMapPolylineOverlay? {
if (!checkAMap()) {
return null
}
val polylineOptions = ObjectUtils.fromMogo(options, mMapView)
if (polylineOptions == null) {
e(TAG, "polyline参数为空")
return null
}
val delegate =
(if (polylineOptions.lineWidth > 0) mAMap!!.drawThickLine(polylineOptions) else mAMap!!.drawLine(
polylineOptions
))
?: return null
return AMapPolylineWrapper(options.id, delegate, mMapView)
}
var batchMarkerOptions = BatchMarkerOptions()
@SuppressLint("NewApi")
override fun updateBatchMarkerPosition(optionsArrayList: HashMap<String, TrackedObject>?) {
if (!checkAMap()) {
return
}
if (optionsArrayList == null || optionsArrayList.size == 0) {
return
}
val markerOptionsArrayList = ArrayList<MarkerSimpleData>()
optionsArrayList.forEach(BiConsumer { s: String?, trackedObject: TrackedObject? ->
val markerOptions = ObjectUtils.fromTrafficData(trackedObject)
if (markerOptions != null) {
markerOptionsArrayList.add(markerOptions)
}
})
if (markerOptionsArrayList.size == 0) {
return
}
val time = markerOptionsArrayList[0].time
batchMarkerOptions.list = markerOptionsArrayList
batchMarkerOptions.delayStrategy = false
batchMarkerOptions.ruleAngle = 8.0f
batchMarkerOptions.controlIcon = 1
batchMarkerOptions.satelliteTime = time
batchMarkerOptions.deleteRule = 0
if (mMapView.getMarkerController() != null) {
mMapView.getMarkerController()!!.updateBatchMarkerPositon(batchMarkerOptions)
}
}
var aiBatchMarkerOptions = BatchMarkerOptions()
init {
i(TAG, "autoop--AMapWrapper: init$this")
mAMap = map
mMapView = mapView
uiController = controller
}
@SuppressLint("NewApi")
override fun updateBatchAiMarkerPosition(optionsArrayList: HashMap<String, SocketDownData.CloudRoadDataProto>?) {
if (!checkAMap()) {
return
}
if (optionsArrayList == null || optionsArrayList.size == 0) {
return
}
val markerOptionsArrayList = ArrayList<MarkerSimpleData>()
optionsArrayList.forEach(BiConsumer { s: String?, trackedObject: SocketDownData.CloudRoadDataProto? ->
val markerOptions = ObjectUtils.fromAiData(trackedObject)
if (markerOptions != null) {
markerOptionsArrayList.add(markerOptions)
}
})
if (markerOptionsArrayList.size == 0) {
return
}
val time = markerOptionsArrayList[0].time
// 最后一个参数,是否管理锚点的删除
aiBatchMarkerOptions.list = markerOptionsArrayList
aiBatchMarkerOptions.delayStrategy = false
aiBatchMarkerOptions.ruleAngle = 8.0f
aiBatchMarkerOptions.controlIcon = 1
aiBatchMarkerOptions.satelliteTime = time
aiBatchMarkerOptions.deleteRule = 0
if (mMapView.getMarkerController() != null) {
mMapView.getMarkerController()!!.updateBatchMarkerPositon(aiBatchMarkerOptions)
}
}
override fun addPreVehicleModel(type: Int, modelRes: Int): String? {
try {
if (mMapView.getMarkerController() != null) {
return mMapView.getMarkerController()!!.addPreVehicleModel(type, modelRes)
}
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
override fun removeMarker(uuidString: String?) {
try {
if (mMapView.getMarkerController() != null) {
mMapView.getMarkerController()!!.removeMarker(uuidString!!)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun checkAMap(): Boolean {
mAMap = mMapView.getMapAutoViewHelper()
if (mAMap == null) {
e(TAG, "自研map实例为空请检查")
return false
}
return true
}
}