[3.4.0-map-sdk] update ,wait to test

This commit is contained in:
zhongchao
2023-08-29 17:06:14 +08:00
parent b421d2dc3f
commit 6bef1de3fc
90 changed files with 1272 additions and 3766 deletions

View File

@@ -0,0 +1,820 @@
package com.mogo.map
import android.graphics.Point
import android.graphics.Rect
import android.os.Bundle
import android.text.TextUtils
import android.view.MotionEvent
import android.view.View
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.enums.TrafficTypeEnum
import com.mogo.eagle.core.data.map.MapRoadInfo
import com.mogo.eagle.core.data.map.MogoLatLng
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84
import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager.setIsInit
import com.mogo.eagle.core.function.call.map.CallerMapDevaListenerManager.invokeUploadLogFile
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.invokeListenersOnRoadIdGet
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.invokeListenersOnStopLineGet
import com.mogo.eagle.core.function.call.map.CallerMapRomaListener.invokeMapRomaStatus
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.w
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.listener.MogoMapListenerHandler.Companion.mogoMapListenerHandler
import com.mogo.map.uicontroller.*
import com.mogo.map.utils.MogoMapUtils
import com.mogo.map.utils.ObjectUtils
import com.zhidaoauto.map.data.point.LonLatPoint
import com.zhidaoauto.map.data.road.RoadCross
import com.zhidaoauto.map.data.road.StopLine
import com.zhidaoauto.map.sdk.open.MapAutoApi
import com.zhidaoauto.map.sdk.open.MapAutoApi.registerLogListener
import com.zhidaoauto.map.sdk.open.MapAutoApi.unregisterLogListener
import com.zhidaoauto.map.sdk.open.abs.*
import com.zhidaoauto.map.sdk.open.abs.log.ILog
import com.zhidaoauto.map.sdk.open.business.PointCloudHelper.setIsDrawPointCloud
import com.zhidaoauto.map.sdk.open.business.PointCloudHelper.setPointCloudColor
import com.zhidaoauto.map.sdk.open.business.PointCloudHelper.setPointCloudSize
import com.zhidaoauto.map.sdk.open.business.PointCloudHelper.updatePointCloudDataByPb
import com.zhidaoauto.map.sdk.open.camera.CameraPosition
import com.zhidaoauto.map.sdk.open.camera.CameraUpdateFactory.newLatLngBounds
import com.zhidaoauto.map.sdk.open.data.MapDataApi.getNearstFromPointToSegment
import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptorFactory.convertViewToBitmap
import com.zhidaoauto.map.sdk.open.marker.Marker
import com.zhidaoauto.map.sdk.open.marker.OnMarkClickListener
import com.zhidaoauto.map.sdk.open.tools.MapTools.fromScreenLocation
import com.zhidaoauto.map.sdk.open.tools.MapTools.getVisibleRegion
import com.zhidaoauto.map.sdk.open.tools.MapTools.toScreenLocation
import com.zhidaoauto.map.sdk.open.view.MapAutoView
import com.zhjt.service.chain.ChainLog
class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIController,
OnMapLoadedListener, OnCameraChangeListener, OnMapClickListener, OnMapTouchListener,
OnMarkClickListener, OnMapStyleListener, OnMapViewVisualAngleChangeListener, OnRoadInfoListener,
ILog, OnRoamStatusListener {
companion object {
private const val TAG = "AMapViewWrapper"
}
private var mMapView: MapAutoView
private val mIMap: IMogoMap
private val DEFAULT_OPTION = CarCursorOption.Builder()
.carCursorRes(R.drawable.map_api_ic_current_location2)
.naviCursorRes(R.drawable.ic_amap_navi_cursor)
.build()
private var mCarCursorOption = DEFAULT_OPTION
@Volatile
private var mCurrentUI: EnumMapUI = EnumMapUI.MAP_STYLE_NIGHT_VR
override var currentMapVisualAngle: VisualAngleMode = VisualAngleMode.MODE_MEDIUM_SIGHT
private set
init {
i(SceneConstant.M_MAP + TAG, "AMapViewWrapper: init")
this.mMapView = mMapView
initViews()
initListeners()
mIMap = AMapWrapper(this.mMapView.getMapAutoViewHelper(), this.mMapView, this)
}
private fun initViews() {
// 初始化首次地图进入的时候的样式, MapAutoApi.INSTANCE.init(context, mapParams);将影响这里的数据
val mapStyle = mMapView.getMapStyleParams()!!.getStyleMode()
d(SceneConstant.M_MAP + TAG, "默认配置地图模式mapStyle=$mapStyle")
when (mapStyle) {
MapAutoApi.MAP_STYLE_DAY -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY
MapAutoApi.MAP_STYLE_DAY_NAV -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY_NAV
MapAutoApi.MAP_STYLE_NIGHT -> mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT
MapAutoApi.MAP_STYLE_NIGHT_NAV -> mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_NAV
MapAutoApi.MAP_STYLE_DAY_VR -> mCurrentUI = EnumMapUI.MAP_STYLE_DAY_VR
MapAutoApi.MAP_STYLE_NIGHT_VR -> mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_VR
else -> e(SceneConstant.M_MAP + TAG, "暂不支持此地图模式默认使用VR夜间模式")
}
}
private fun initListeners() {
mMapView.setOnMarkClickListener(this)
mMapView.setOnMapLoadedListener(this)
mMapView.setOnMapTouchListener(this)
mMapView.setOnMapClickListener(this)
mMapView.setOnCameraChangeListener(this)
mMapView.setOnMapStyleListener(this)
mMapView.setOnRoamStatusListener(this)
mMapView.setOnMapViewVisualAngleChangeListener(this)
mMapView.setOnRoadInfoListener(this, 1)
registerLogListener(this, mMapView.getEventController())
d(SceneConstant.M_MAP + TAG, "initListeners - setOnMapStyleListener - view $mMapView")
}
override fun getMapView(): View {
return mMapView
}
override fun getMap(): IMogoMap {
return mIMap
}
override fun onCreate(bundle: Bundle?) {
mMapView.onCreate(bundle)
d(SceneConstant.M_MAP + TAG, "map onCreate")
}
override fun onResume() {
mMapView.onResume()
d(SceneConstant.M_MAP + TAG, "map onResume")
}
override fun onPause() {
mMapView.onPause()
d(SceneConstant.M_MAP + TAG, "map onPause")
}
override fun onDestroy() {
mMapView.onDestroy()
mMapView.setOnMarkClickListener(null)
mMapView.setOnMapLoadedListener(null)
mMapView.setOnMapTouchListener(null)
mMapView.setOnMapClickListener(null)
mMapView.setOnCameraChangeListener(null)
mMapView.setOnMapStyleListener(null)
mMapView.setOnMapViewVisualAngleChangeListener(null)
unregisterLogListener(this, mMapView.getEventController())
d(SceneConstant.M_MAP + TAG, "map onDestroy")
}
override fun onSaveInstanceState(outState: Bundle) {
mMapView.onSaveInstanceState(outState)
d(SceneConstant.M_MAP + TAG, "map onSaveInstanceState")
}
override fun onLowMemory() {}
//渲染第一帧
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_INIT_STATUS,
linkCode = ChainConstant.CHAIN_SOURCE_INIT,
nodeAliasCode = ChainConstant.CHAIN_CODE_INIT_ON_MAP_INIT,
paramIndexes = [-1]
)
override fun onMapInit() {
i(SceneConstant.M_MAP + TAG, "onMapInit: ")
mogoMapListenerHandler.onMapLoaded()
}
//地图视图准备
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_INIT_STATUS,
linkCode = ChainConstant.CHAIN_SOURCE_INIT,
nodeAliasCode = ChainConstant.CHAIN_CODE_INIT_ON_MAP_LOADED,
paramIndexes = [-1]
)
override fun onMapLoaded() {
i(SceneConstant.M_MAP + TAG, "onMapLoaded: ")
if (checkAMapView()) {
val cameraPosition = mMapView.getMapAutoViewHelper()!!
.getCameraPosition()
mogoMapListenerHandler.onMapChanged(
ObjectUtils.fromAMap(cameraPosition.target),
cameraPosition.zoom,
cameraPosition.tilt,
cameraPosition.bearing
)
loadPreVehicleModel()
}
}
/**
* 修改获取当前车道号
*
* @param roadId
* @param laneId
*/
override fun onRoadIdInfo(roadId: String?, laneId: String?) {
if (roadId != null && !TextUtils.isEmpty(roadId)) {
invokeListenersOnRoadIdGet(roadId)
}
}
override fun onRoadCrossInfo(roadCross: RoadCross?) {
d(SceneConstant.M_MAP + TAG, "onRoadCrossInfo:roadCross$roadCross")
}
//todo 多实例 对象替换
override fun onStopLineInfo(stopLine: StopLine?) {
val carLoc = getChassisLocationWGS84()
if (stopLine != null && !stopLine.road_id.isEmpty() && stopLine.points.size > 0) {
val points = stopLine.points
d(SceneConstant.M_MAP + TAG, "onStopLineInfo:stop_line$stopLine")
val stopInfo = convert(stopLine)
val p1 = points[0]
val p2 = points[points.size - 1]
val distanceOfCarToStopLine = getNearstFromPointToSegment(
carLoc.longitude,
carLoc.latitude,
p1.longitude,
p1.latitude,
p2.longitude,
p2.latitude
) * 100000
stopInfo.distanceOfCarToStopLine = distanceOfCarToStopLine
d(SceneConstant.M_MAP + TAG, "onStopLineInfo: --- distance: $distanceOfCarToStopLine")
invokeListenersOnStopLineGet(stopInfo)
}
}
private fun convert(line: StopLine): MapRoadInfo.StopLine {
val ret = MapRoadInfo.StopLine()
ret.distance = line.distance
ret.laneId = line.lane_id
ret.roadId = line.road_id
ret.tieId = line.tile_id
val points = line.points
if (points.size > 0) {
val newPoints: MutableList<MogoLatLng> = ArrayList()
for (i in points.indices) {
val lonLatPoint = points[i]
val latLng = MogoLatLng(lonLatPoint.latitude, lonLatPoint.longitude)
latLng.duration = lonLatPoint.duration
latLng.angle = lonLatPoint.angle
latLng.speed = lonLatPoint.speed
latLng.altitude = lonLatPoint.altitude
latLng.provider = lonLatPoint.provider
newPoints.add(latLng)
}
ret.points = newPoints
}
return ret
}
override fun changeZoom(zoom: Float): MapControlResult {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setZoom(zoom.toInt())
}
return MapControlResult.SUCCESS
}
override fun changeZoom2(zoom: Float) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setZoomVal(zoom)
}
}
override fun changeMapVisualAngle(angelMode: VisualAngleMode, mogoLatLng: MogoLatLng?) {
val mapAutoViewHelper = mMapView.getMapAutoViewHelper()
if (mapAutoViewHelper != null) {
currentMapVisualAngle = angelMode
if (angelMode == VisualAngleMode.MODE_CLOSE_SIGHT) {
if (mogoLatLng == null) {
e(SceneConstant.M_MAP + TAG, "切换地图近景需要传入要移动的经纬度数据")
return
}
// 近景传入经纬度为点击地图上静态marker经纬度数据为GPS坐标点。
mapAutoViewHelper.setNearViewAnglePosition(
LonLatPoint(
mogoLatLng.lon,
mogoLatLng.lat
), true
)
} else {
mapAutoViewHelper.setMapViewVisualAngle(angelMode.code)
}
}
}
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_HD_MAP,
linkCode = ChainConstant.CHAIN_SOURCE_MAP,
nodeAliasCode = ChainConstant.CHAIN_CODE_HD_MAP_CALL,
paramIndexes = [0]
)
override fun setRoamTrajectory(trajectory: String) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setRoamTrajectory(trajectory)
}
}
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_HD_MAP,
linkCode = ChainConstant.CHAIN_SOURCE_MAP,
parentNodeAliasCode = ChainConstant.CHAIN_CODE_ROMA_REQUEST_OK,
nodeAliasCode = ChainConstant.CHAIN_CODE_ROMA_MODE_INVOKE,
paramIndexes = [0],
endPoint = false
)
override fun setRomaMode(mode: Int) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setRoamStyle(mode, 1800f, MapAutoApi.ROAM_SPEED_40)
}
}
override fun moveToCenter(latLng: MogoLatLng) {
moveToCenter(latLng, true)
}
private fun checkAMapView(): Boolean {
if (mMapView.getMapAutoViewHelper() == null) {
e(SceneConstant.M_MAP + TAG, "自研mapView实例为空请检查")
return false
}
return true
}
override fun moveToCenter(latLng: MogoLatLng, animate: Boolean) {
d(SceneConstant.M_MAP + TAG, "move to center $latLng")
if (latLng.lat == 0.0 || latLng.lon == 0.0) {
e(SceneConstant.M_MAP + TAG, "latLng = null or is illegal")
return
}
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!
.animateCamera(LonLatPoint(latLng.lon, latLng.lat))
}
}
override fun showMyLocation(visible: Boolean) {
d(SceneConstant.M_MAP + TAG, "showMyLocation1 $visible")
// 如果是VR模式
if (isVrMold) {
return
}
// 不是VR模式情况强制刷新下
if (checkAMapView()) {
val style = mMapView.getMapAutoViewHelper()!!
.getMyLocationStyle()
if (visible) {
// 强制刷新一遍车标
style!!.myLocationIcon(mCarCursorOption!!.carCursorRes)
}
mMapView.getMapAutoViewHelper()!!.setMyLocationStyle(style!!)
}
}
/**
* @return true-是false=不是
*/
private val isVrMold: Boolean
get() {
val isVrMode =
mCurrentUI === EnumMapUI.MAP_STYLE_NIGHT_VR || mCurrentUI === EnumMapUI.MAP_STYLE_DAY_VR
d(SceneConstant.M_MAP + TAG, "是否是VR模式: $isVrMode")
return isVrMode
}
/**
* 是否是白天模式
*
* @return true-是false-不是
*/
override val isDayMode: Boolean
get() = mCurrentUI === EnumMapUI.MAP_STYLE_DAY_VR || mCurrentUI === EnumMapUI.MAP_STYLE_DAY || mCurrentUI === EnumMapUI.MAP_STYLE_DAY_NAV
override fun showMyLocation(view: View) {
if (checkAMapView()) {
val style = mMapView.getMapAutoViewHelper()!!.getMyLocationStyle()
style!!.myLocationIcon(convertViewToBitmap(view))
mMapView.getMapAutoViewHelper()!!.setMyLocationStyle(style)
}
}
override val scalePerPixel: Float
get() = if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.getScalePerPixel()
} else 0.0f
override val zoomLevel: Float
get() = if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.getZoom().toFloat()
} else 0.0f
override val cameraNorthEastPosition: MogoLatLng?
get() = ObjectUtils.fromAMap(getVisibleRegion(mMapView.getMapController()).rightTopPoint)
override val cameraSouthWestPosition: MogoLatLng?
get() {
try {
return ObjectUtils.fromAMap(getVisibleRegion(mMapView.getMapController()).leftBottomPoint)
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
override val windowCenterLocation: MogoLatLng?
get() {
try {
if (checkAMapView()) {
return ObjectUtils.fromAMap(mMapView.getMapAutoViewHelper()!!.getCenter())
}
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
override fun setPointToCenter(mapCenterX: Double, mapCenterY: Double) {
if (checkAMapView()) {
if (isVrMold) {
return
}
mMapView.getMapAutoViewHelper()!!
.setPointToCenter(mapCenterX.toFloat(), mapCenterY.toFloat())
}
}
override fun getLocationPointInScreen(latLng: MogoLatLng): Point? {
return if (checkAMapView()) {
try {
toScreenLocation(ObjectUtils.fromMogo(latLng), mMapView.getMapController())
} catch (e: Exception) {
e.printStackTrace()
null
}
} else null
}
override fun getLocationMogoLatLngInScreen(point: Point): MogoLatLng? {
return if (checkAMapView()) {
try {
ObjectUtils.fromAMap(fromScreenLocation(point, mMapView.getMapController()))
} catch (e: Exception) {
e.printStackTrace()
null
}
} else null
}
override fun setRenderFps(fps: Int) {
if (checkAMapView()) {
if (mMapView.getMapAutoViewHelper() != null) {
mMapView.getMapAutoViewHelper()!!.setRenderFps(fps)
}
}
}
override fun showBounds(
tag: String,
carPosition: MogoLatLng,
lonLats: List<MogoLatLng>,
bound: Rect,
lockCarPosition: Boolean
) {
if (!checkAMapView()) {
return
}
if (isVrMold) {
w(SceneConstant.M_MAP + TAG, "vr 模式下忽略该设置")
return
}
i(
SceneConstant.M_MAP + TAG,
"showBounds : " + carPosition.toString() + " , " + bound.toShortString() + " , " + lockCarPosition
)
try {
val latLngBounds = MogoMapUtils.getLatLngBounds(carPosition, lonLats, lockCarPosition)
mMapView.getMapAutoViewHelper()!!.setCenter(ObjectUtils.fromMogo(carPosition))
mMapView.getMapAutoViewHelper()!!.moveCamera(
newLatLngBounds(
latLngBounds,
bound.left,
bound.right,
bound.top,
bound.bottom
)
)
} catch (e: Exception) {
e(SceneConstant.M_MAP + TAG, " error : $e")
}
}
override fun forceRender() {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.runOnDrawFrame()
}
}
override fun calculateLineDistance(p1: MogoLatLng, p2: MogoLatLng): Float {
return MogoMapUtils.calculateLineDistance(
ObjectUtils.fromMogo(p1),
ObjectUtils.fromMogo(p2)
)
}
@get:Synchronized
override val isCarLocked: Boolean
get() = mMapView.getMapAutoViewHelper()!!.getLockMode()
override fun setCarCursorOption(option: CarCursorOption) {
if (isVrMold) {
return
}
if (!checkAMapView()) {
return
}
if (mCarCursorOption != null && mCarCursorOption !== DEFAULT_OPTION) {
mCarCursorOption!!.destroy()
}
mCarCursorOption = try {
option.clone()
} catch (e: Exception) {
DEFAULT_OPTION
}
val style = mMapView.getMapAutoViewHelper()!!.getMyLocationStyle()
if (mCarCursorOption!!.carCursorBmp != null && !mCarCursorOption!!.carCursorBmp.isRecycled) {
style!!.myLocationIcon(mCarCursorOption!!.carCursorBmp)
} else {
if (mCarCursorOption!!.carCursorRes != 0) {
style!!.myLocationIcon(mCarCursorOption!!.carCursorRes)
}
}
mMapView.getMapAutoViewHelper()!!.setMyLocationStyle(style!!)
}
/**
* 设置转向灯和刹车灯
*
* @param type :车尾灯类型
* @param time 闪烁时间 最小500ms 小于500ms 默认为500ms
*/
override fun setCarLightsType(type: Int, time: Int) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setTailLightsType(type, time)
}
}
override val mapCameraPosition: MapCameraPosition?
get() {
if (checkAMapView()) {
val cameraPosition = mMapView.getMapAutoViewHelper()!!.getCameraPosition()
return ObjectUtils.fromAMap(cameraPosition)
}
return null
}
override fun changeBearing(bearing: Float) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setMapViewRotation(bearing)
}
}
override fun changeCurrentIcon(iconId: Int) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.getMyLocationStyle()!!.myLocationIcon(iconId, true)
}
}
override fun result(path: String) {
invokeUploadLogFile(path)
}
override fun onTouch(event: MotionEvent): Boolean {
mogoMapListenerHandler.onTouch(event)
return false
}
override fun onMapClick(lonLatPoint: LonLatPoint) {
mogoMapListenerHandler.onMapClick(ObjectUtils.fromAMap(lonLatPoint))
}
override fun onMapViewVisualAngleChange(type: Int) {
d(SceneConstant.M_MAP + TAG, " 地图自动更改视距 currentThread : " + Thread.currentThread().name)
currentMapVisualAngle = getVisualAngleMode(type)
mogoMapListenerHandler.onMapVisualAngleChanged(currentMapVisualAngle)
}
private fun getVisualAngleMode(mode: Int): VisualAngleMode {
return when (mode) {
0 -> VisualAngleMode.MODE_CLOSE_SIGHT
1 -> VisualAngleMode.MODE_MEDIUM_SIGHT
2 -> VisualAngleMode.MODE_LONG_SIGHT
3 -> VisualAngleMode.MAP_STYLE_VR_ANGLE_300
4 -> VisualAngleMode.MAP_STYLE_VR_ANGLE_TOP
5 -> VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS
7 -> VisualAngleMode.MAP_STYLE_VR_ROMA
else -> VisualAngleMode.MODE_MEDIUM_SIGHT
}
}
override fun onCameraChange(type: Int, value: Int) {}
override fun onCameraChangeFinish(position: CameraPosition?) {
position?.let {
mogoMapListenerHandler.onMapChanged(
ObjectUtils.fromAMap(position.target),
position.zoom,
position.tilt,
position.bearing
)
}
}
override fun onChangeMapStyle(style: Int) {
// CallerLogger.INSTANCE.d(M_MAP + TAG, "currentMapStyle = " + styleId + " , current = " + mCurrentUI);
// 映射地图样式ID到鹰眼样式ID
when (style) {
MapAutoApi.MAP_STYLE_DAY, MapAutoApi.MAP_STYLE_DAY_NAV -> {
mCurrentUI = EnumMapUI.MAP_STYLE_DAY_NAV
}
MapAutoApi.MAP_STYLE_NIGHT -> {
mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT
}
MapAutoApi.MAP_STYLE_NIGHT_NAV -> {
mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_NAV
}
MapAutoApi.MAP_STYLE_NIGHT_VR -> {
mCurrentUI = EnumMapUI.MAP_STYLE_NIGHT_VR
}
MapAutoApi.MAP_STYLE_DAY_VR -> {
mCurrentUI = EnumMapUI.MAP_STYLE_DAY_VR
}
}
loadPreVehicleModel()
mogoMapListenerHandler.onMapModeChanged(mCurrentUI)
}
override fun onMarkClick(marker: Marker) {
}
override fun onRoamStatus(status: Int, msg: String) {
invokeMapRomaStatus(status, msg)
}
override fun rtkEnable(enable: Boolean) {
if (checkAMapView()) {
mMapView.getLocationClient()!!.rtkEnable(enable)
}
}
override fun stepInDayMode(isDayMode: Boolean) {
// try {
// if (mMapView != null && mMapView.getMapAutoViewHelper() != null) {
// mMapView.getMapAutoViewHelper().setMapStyle();
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
}
override fun setMapDAngle(angle: Float) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setMapDAngle(angle)
}
}
/**
* 加载3D模型
*/
private fun loadPreVehicleModel() {
d(SceneConstant.M_MAP + TAG, "添加感知模型到地图中……")
ThreadUtils.getIoPool().submit {
addPreVehicleModelWeiZhi(
TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI,
"添加感知模型到地图中……preVehicleStrWeiZhi="
)
addPreVehicleModelWeiZhi(
TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE,
"添加感知模型到地图中……preVehicleStrPeople="
)
addPreVehicleModelWeiZhi(
TrafficTypeEnum.TYPE_TRAFFIC_ID_BICYCLE,
"添加感知模型到地图中……preVehicleStrBicycle="
)
addPreVehicleModelWeiZhi(
TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE,
"添加感知模型到地图中……preVehicleStrTaChe="
)
addPreVehicleModelWeiZhi(
TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO,
"添加感知模型到地图中……preVehicleStrMoto="
)
addPreVehicleModelWeiZhi(
TrafficTypeEnum.TYPE_TRAFFIC_ID_BUS,
"添加感知模型到地图中……preVehicleStrBus="
)
addPreVehicleModelWeiZhi(
TrafficTypeEnum.TYPE_TRAFFIC_ID_TRUCK,
"添加感知模型到地图中……preVehicleStrTruck="
)
}
}
/**
* 添加模型到地图中
*
* @param typeTrafficId 障碍物类型ID
* @param logMsg 日志消息
*/
private fun addPreVehicleModelWeiZhi(typeTrafficId: TrafficTypeEnum, logMsg: String) {
// 根据当前的地图皮肤模式动态替换
val preVehicleStrWeiZhi: String? = if (isDayMode) {
map.addPreVehicleModel(typeTrafficId.type, typeTrafficId.traffic3DIconId)
} else {
map.addPreVehicleModel(typeTrafficId.type, typeTrafficId.traffic3DNightIconId)
}
d(SceneConstant.M_MAP + TAG, logMsg + preVehicleStrWeiZhi)
if (preVehicleStrWeiZhi == null) {
UiThreadHandler.postDelayed({
w(SceneConstant.M_MAP + TAG, "添加感知模型到地图中失败,尝试重复添加……")
addPreVehicleModelWeiZhi(typeTrafficId, logMsg)
}, 1000L)
}
}
override fun setLockMode(isLock: Boolean) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setLockMode(isLock)
}
}
override fun setScrollGesturesEnable(isEnable: Boolean) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setScrollGesturesEnabled(isEnable)
}
}
override fun setAllGesturesEnabled(isEnable: Boolean) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.setAllGesturesEnabled(isEnable)
}
}
override fun setExtraGPSData(gnssInfo: MogoLocation) {
val locationClient = mMapView.getLocationClient()
if (locationClient != null) {
locationClient.setIsUseExtraGPSData(true) //设置是否使用外界坐标
locationClient.rtkEnable(true) //设置是否是高精定位
val lonLatPoint = LonLatPoint()
lonLatPoint.angle = gnssInfo.heading
lonLatPoint.altitude = gnssInfo.altitude
lonLatPoint.longitude = gnssInfo.longitude
lonLatPoint.latitude = gnssInfo.latitude
lonLatPoint.satelliteTime =
java.lang.Double.valueOf((gnssInfo.satelliteTime * 1000).toDouble()).toLong()
lonLatPoint.speed = gnssInfo.gnssSpeed.toDouble()
locationClient.updateLocation(lonLatPoint) //更新新自动驾驶RTK相关数据
setIsInit()
}
}
// 是否绘制点云
override fun setIsDrawPointCloud(isDrawPointCloud: Boolean) {
try {
setIsDrawPointCloud(isDrawPointCloud, mMapView.getMapController())
} catch (e: Exception) {
e.printStackTrace()
}
}
//设置点云大小
override fun setPointCloudSize(pointCloudSize: Float) {
setPointCloudSize(pointCloudSize, mMapView.getMapController())
}
// 设置点云颜色
override fun setPointCloudColor(color: String) {
setPointCloudColor(color, mMapView.getMapController())
}
//更新点云
override fun updatePointCloud(
dataArray: ByteArray?, isTrasformer: Boolean, isResidual: Boolean, isReset: Boolean
): Boolean {
return updatePointCloudDataByPb(
dataArray, isTrasformer, isResidual, isReset, mMapView.getMapController()
)
}
override fun animateTo(
lon: Double,
lat: Double,
rotateAngle: Float,
duration: Int,
isGps: Boolean
) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.animateTo(lon, lat, rotateAngle, duration, isGps)
}
}
override fun animateTo(
lon: Double,
lat: Double,
v1: Float,
v2: Float,
v3: Float,
v4: Float,
duration: Int,
isGps: Boolean
) {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.animateTo(lon, lat, v1, v2, v3, v4, duration, isGps)
}
}
override fun clear() {
if (checkAMapView()) {
mMapView.getMapAutoViewHelper()!!.clearPanel()
}
}
}