Merge branch 'dev_arch_opt_3.0' of gitlab.zhidaoauto.com:zhjt/AndroidApp/MoGoEagleEye into dev_arch_opt_3.0
This commit is contained in:
@@ -130,7 +130,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
paramIndexes = [0, 1],
|
||||
clientPkFileName = "sn"
|
||||
)
|
||||
override fun onGnssInfo(header: MessagePad.Header, gnssInfo: MessagePad.GnssInfo?) {
|
||||
override fun onGnssInfo(header: MessagePad.Header, gnssInfo: MessagePad.GnssInfo) {
|
||||
// WGS84坐标系高精度位置信息
|
||||
invokeChassisLocationWGS84(gnssInfo)
|
||||
// GCJ02高德坐标系位置信息
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.mogo.eagle.core.function.datacenter.location
|
||||
|
||||
import com.mogo.eagle.core.data.enums.DataSourceType
|
||||
import mogo.telematics.pad.MessagePad
|
||||
|
||||
/**
|
||||
* 位置回调监听
|
||||
*/
|
||||
interface IMoGoLocationListener {
|
||||
/**
|
||||
* 位置改变回调用
|
||||
* @param gnssInfo 位置信息
|
||||
* @param sourceType 数据来源
|
||||
*/
|
||||
fun onLocationChanged(gnssInfo: MessagePad.GnssInfo, sourceType: DataSourceType)
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.mogo.eagle.core.function.datacenter.location
|
||||
|
||||
import com.mogo.eagle.core.data.enums.DataSourceType
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
|
||||
import com.mogo.eagle.core.function.api.obu.IMoGoObuLocationWGS84Listener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import com.mogo.eagle.core.utilcode.util.TimeUtils
|
||||
import com.mogo.support.obu.model.MogoObuHvBasicsData
|
||||
import mogo.telematics.pad.MessagePad
|
||||
|
||||
/**
|
||||
* 融合定位服务,这里同时监听多来源的位置信息,并支持修改频率
|
||||
*
|
||||
* @author donghongyu
|
||||
*/
|
||||
object MoGoLocationManager :
|
||||
CallerBase<IMoGoLocationListener>(),
|
||||
IMoGoChassisLocationWGS84Listener,
|
||||
IMoGoObuLocationWGS84Listener {
|
||||
private val TAG = "MoGoLocationManager"
|
||||
|
||||
init {
|
||||
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
|
||||
}
|
||||
|
||||
override fun onChassisLocationWGS84(gnssInfo: MessagePad.GnssInfo) {
|
||||
M_LISTENERS.forEach {
|
||||
val tag = it.key
|
||||
// 获取数据监听需要的HZ
|
||||
val hz = M_LISTENERS_HZ[tag]
|
||||
if (hz != null && hz > 0) {
|
||||
val hzTime = (1.0 / hz.toDouble()) * 1000
|
||||
// 获取最后一次回调的时间
|
||||
val hzLastSendTime = M_LISTENERS_HZ_LAST_SEND_TIME[tag]
|
||||
if (hzLastSendTime != null && hzLastSendTime > 0) {
|
||||
// 计算是否进入下一次回调周期
|
||||
val nowTime = TimeUtils.getNowMills()
|
||||
if (nowTime - hzLastSendTime > hzTime) {
|
||||
syncLocationCallback(tag, it, gnssInfo, DataSourceType.TELEMATIC)
|
||||
}
|
||||
} else {
|
||||
syncLocationCallback(tag, it, gnssInfo, DataSourceType.TELEMATIC)
|
||||
}
|
||||
} else {
|
||||
syncLocationCallback(tag, it, gnssInfo, DataSourceType.TELEMATIC)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 向订阅位置信息的发出定位信息
|
||||
*/
|
||||
private fun syncLocationCallback(
|
||||
tag: String,
|
||||
it: Map.Entry<String, IMoGoLocationListener>,
|
||||
gnssInfo: MessagePad.GnssInfo,
|
||||
sourceType: DataSourceType
|
||||
) {
|
||||
// 记录最后一次回调时间
|
||||
M_LISTENERS_HZ_LAST_SEND_TIME[tag] = TimeUtils.getNowMills()
|
||||
val listener = it.value
|
||||
listener.onLocationChanged(gnssInfo, sourceType)
|
||||
}
|
||||
|
||||
override fun onObuLocationWGS84(data: MogoObuHvBasicsData) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
#### 说明
|
||||
|
||||
##### 位置回调:融合工控机、OBU、高德地图
|
||||
|
||||
```kotlin
|
||||
// 注册监听位置变换
|
||||
MoGoLocationManager.addListener(Companion.functionName, object : IMoGoLocationListener {
|
||||
override fun onLocationChanged(
|
||||
gnssInfo: MessagePad.GnssInfo,
|
||||
sourceType: DataSourceType
|
||||
) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
})
|
||||
// 设置数据回调频率,单位HZ,1HZ的周期是1秒;50HZ的周期是1/50=0.02秒;10HZ的周期是1/10=0.1秒。
|
||||
MoGoLocationManager.setListenerHz(Companion.functionName, 20)
|
||||
```
|
||||
Reference in New Issue
Block a user