Commit bb95327c authored by 罗小雨's avatar 罗小雨
Browse files

本地模拟感知物数据实现变红、清除感知物

parent 36c48341
package com.sd.cavphmi.bean
/**
* 感知目标物实体
****/
class PerTargetTest : ArrayList<PerTargetTestItem>()
data class PerTargetTestItem(
val id: String,
val accessTime: Long,
val deviceId: String,
val deviceCode: String,
val intersectionCode: String,
val participants: List<ParticipantTest>,
val receiveTime: Long,
val reportTime: Long,
// val statistic: Statistic
)
data class ParticipantTest(
val color: Int,
val gear: Int,
val heading: Double,
val latitude: Double,
val longitude: Double,
val ptcId: String,
val ptcType: String,
val speed: Double,
var aniTime:Long,
var isFlash:Boolean,
var isRed:Boolean
)
data class StatisticTest(
val ambulance: Int,
val bike: Int,
val bus: Int,
val car: Int,
val coach: Int,
val concrete_mixer: Int,
val conical_barrel: Int,
val electric_bicycle: Int,
val engine_emergency: Int,
val fire_truck: Int,
val heavy_truck: Int,
val large_truck: Int,
val micro_truck: Int,
val midibus: Int,
val minibus: Int,
val motorcycle: Int,
val mpv: Int,
val pedestrian: Int,
val pickup: Int,
val police_car: Int,
val small_truck: Int,
val spillage: Int,
val suv: Int,
val tank_truck: Int,
val tricycle: Int,
val truck: Int,
val unknown: Int
)
\ No newline at end of file
package com.sd.cavphmi.highmap
import com.google.gson.Gson
import com.ltzw.adasdriver.highmap.TileJsonBean
import com.unity3d.player.UnityPlayer
......
package com.sd.cavphmi.highmap
import com.ltzw.adasdriver.utils.MyContants
/**
* 感知物数据
......
package com.sd.cavphmi.highmap
import com.ltzw.adasdriver.utils.MyContants
import com.sd.cavphmi.utils.MyContants
/**
* 给unity 初始化json
......
package com.sd.cavphmi.ui
import android.os.Handler
import android.util.Log
import android.view.KeyEvent
import android.widget.RelativeLayout
import android.widget.Toast
......@@ -10,6 +12,8 @@ import com.sd.cavphmi.R
import com.sd.cavphmi.base.BaseActivity
import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.databinding.ActivityMainBinding
import com.sd.cavphmi.highmap.HighMapApi
import com.sd.cavphmi.highmap.UnityPtc
import com.sd.cavphmi.intfaces.OnConCan
import com.sd.cavphmi.ui.fragment.CarPanelFragment
import com.sd.cavphmi.ui.fragment.ExoPlayFragment
......@@ -59,7 +63,6 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>(),
//exo播放器
private val exoPlayFragment by lazy { ExoPlayFragment.newInstance() }
override fun initView() {
mainVm.mockVM = mockVM
//车辆仪表
......@@ -102,15 +105,45 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>(),
}
//感知目标物
binding.btTarget.setOnClickListener {
mainVm.subTarget()
mainVm.subTarget().observe(this) {
if(it.size==0){
HighMapApi.clearPtcData()
return@observe
}
it.forEachIndexed { index, perTargetTestItem ->
var list = perTargetTestItem.participants
val ptcList: MutableList<UnityPtc> = ArrayList(list.size)
list.forEachIndexed { index, item ->
var unityPtc = UnityPtc()
unityPtc.lat = item.latitude
unityPtc.lon = item.longitude
unityPtc.ptcid = item.ptcId
unityPtc.heading = item.heading
// unityPtc.aniTime=ptc.aniTime
unityPtc.aniTime = 1
if (item.ptcType == "car") {
unityPtc.pType = 1
} else {
unityPtc.pType = 2
}
// unityPtc.isFlash=ptc.isFlash
// unityPtc.isRed=ptc.isRed
unityPtc.isFlash = true
unityPtc.isRed = true
ptcList.add(unityPtc)
}
HighMapApi.setPtcData(ptcList)
}
}
}
//v2x 预警
binding.btV2x.setOnClickListener {
mainVm.subStartV2x()
}
//模拟选择车辆
binding.btSetcar.setOnClickListener{
var list= listOf("skywell.1ggvlp16.car10","skywell.1ggvlp16.car8")
binding.btSetcar.setOnClickListener {
var list = listOf("skywell.1ggvlp16.car10", "skywell.1ggvlp16.car8")
val dialog = CustomListDialog(this, "选择车辆", list)
dialog.setOnItemClickListener(this)
dialog.show()
......
......@@ -117,11 +117,11 @@ class CarPanelFragment : BaseFragment<FragmentCarPanelBinding, CarPanelVM>() {
override fun initListener() {
mainVm.carVehicle.observe(this) {
//更新车辆仪表,这里模拟只取第一个
viewModel.setCarPanelBean(it)
for( item in it){
Log.e("Car", "------车辆位姿数据----$item")
HighMapApi.setCarPosition(20.80189f,item.heading,item.latitude,item.longitude)
HighMapApi.setCarPosition(item.heading,item.latitude,item.longitude,item.elevation.toDouble())
// HighMapApi.setCarPosition(item.heading,item.latitude,item.longitude,20.80189)
}
}
......
......@@ -6,7 +6,8 @@ object MyContants {
// var HOST = "https://itg-dev.cu-sc.com:19443/"
//开发环境切勿动
var HOST = "https://itg-yz.cu-sc.com:13443"
//智网生产环境地址用于拼接3dtile.json
var HOST_HTTP_3 = "https://itg-yz.cu-sc.com:13443"
/***测试环境socket token***/
private val WSTOKEN =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiI0MTc0NDY3NGNlOGM0MDZmOTVkZTVkYWYyMWVlOWQ0ZiIsImNyZWF0ZVRpbWUiOjE3NTUwNzYxMTgxMjQsInVzZXJUeXBlIjoxLCJzb3VyY2UiOjAsInB3ZEV4cGlyZWQiOmZhbHNlLCJ1c2VybmFtZSI6ImNoZW5ieTUxIn0.aPYHCxXgQHj4eYGGZnce5MPJCtmMoRcIIHcNXzMMOHE"
......@@ -19,12 +20,13 @@ object MyContants {
// private val reType = "51world"
//跟踪车辆的ID 267(模拟) skywell.1ggvlp16.car10 skywell.1ggvlp16.car8
private val VEHICLEID = "skywell.1ggvlp16.car8"
// var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&vehicleId=${VEHICLEID}&"
var WSHOST = "wss://172.24.124.130:19443/wsplus/socket?token=121&reType=freedo&vehicleId=7&"
var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&vehicleId=${VEHICLEID}&"
// var WSHOST = "wss://172.24.124.130:19443/wsplus/socket?token=121&reType=freedo&vehicleId=7&"
// var PORT = if (IS_DEBUG) "123" else "34534"
/***感知目标物 &intersectionCode=17 停车场 不传就是整个园区***/
var WS_FEEL_TARGET = "${WSHOST}msgType=1&intersectionCode=17"
// var WS_FEEL_TARGET = "${WSHOST}msgType=1&intersectionCode=17"
var WS_FEEL_TARGET = "wss://172.24.124.130:19443/wsplus/socket?token=121&reType=freedo&&msgType=1&intersectionCode=17"
/***网联车辆位姿 &vehicleId=***/
// var WS_VEH_LOC = "${WSHOST}msgType=2"
......
......@@ -9,6 +9,7 @@ import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.AvpStatuBean
import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.PerTarget
import com.sd.cavphmi.bean.PerTargetTest
import com.sd.cavphmi.bean.SpaceInfoBean
import com.sd.cavphmi.bean.V2xStartBean
import com.sd.cavphmi.bean.VToXImgBean
......@@ -71,7 +72,7 @@ class MainVm @Inject constructor(
lateinit var mockVM: MockVM
//是否需要模拟
var isMock = false
var isMock = true
//车辆位姿数据
var carVehicle = MutableLiveData<CarVehicle>()
......@@ -80,7 +81,7 @@ class MainVm @Inject constructor(
var vehDetail = MutableLiveData<VehDetailBean>()
//感知目标物
var targetPre = MutableLiveData<PerTarget>()
var targetPre = MutableLiveData<PerTargetTest>()
//v2x 预警
var v2xStartBean = MutableLiveData<V2xStartBean>()
......@@ -212,7 +213,7 @@ class MainVm @Inject constructor(
/**感知目标物数据
*传入intersectionCode=17 拼接 代表获取某区域的感知物,目前没有数据
*/
fun subTarget(): LiveData<PerTarget> {
fun subTarget(): LiveData<PerTargetTest> {
if (isMock) {
mockVM.onSubTargetMock(targetPre)
} else {
......@@ -221,7 +222,7 @@ class MainVm @Inject constructor(
override fun onMsg(str: String) {
viewModelScope.launch {
FileIoUtils.writeToFile(str, "PerTarget.txt")
var bean = gson.fromJson(str, PerTarget::class.java)
var bean = gson.fromJson(str, PerTargetTest::class.java)
targetPre.postValue(bean)
}
}
......
......@@ -10,6 +10,7 @@ import com.sd.cavphmi.bean.CarPanelBean
import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.CarVehicleItem
import com.sd.cavphmi.bean.PerTarget
import com.sd.cavphmi.bean.PerTargetTest
import com.sd.cavphmi.bean.V2xStartBean
import com.sd.cavphmi.utils.FileIoUtils
import dagger.hilt.android.lifecycle.HiltViewModel
......@@ -58,13 +59,13 @@ class MockVM @Inject constructor(
//感知目标物
fun onSubTargetMock(targetPre: MutableLiveData<PerTarget>) {
fun onSubTargetMock(targetPre: MutableLiveData<PerTargetTest>) {
viewModelScope.launch {
val parts = mutableListOf<String>()
FileIoUtils.getAssetMock(context, "mock/PerTarget.txt", parts)
parts.forEach { str ->
delay(1000)
var bean = parseDataBean(str, PerTarget::class.java)
var bean = parseDataBean(str, PerTargetTest::class.java)
// println("------模拟感知目标物数据 = ${bean}")
// println("------模拟感知目标物typeName = ${bean.typeName}")
// println("------模拟感知目标物type = ${bean.type}")
......
......@@ -3,15 +3,27 @@ package com.sd.cavphmi.websockets
import org.java_websocket.client.WebSocketClient
import org.java_websocket.drafts.Draft
import org.java_websocket.handshake.ServerHandshake
import java.net.Socket
import java.net.URI
import java.nio.ByteBuffer
import java.security.SecureRandom
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLEngine
import javax.net.ssl.SSLSocketFactory
import javax.net.ssl.TrustManager
import javax.net.ssl.X509ExtendedTrustManager
/*****感知目标物**/
class FeelTargetWSClient : WebSocketClient {
private val TAG = "-----FeelTargetWSClient"
constructor(serverUri: URI) : super(serverUri)
constructor(serverUri: URI) : super(serverUri){
if(serverUri.toString().contains("wss://")){
trustAllHosts()
}
}
constructor(serverUri: URI?, protocolDraft: Draft?) : super(serverUri, protocolDraft)
......@@ -55,5 +67,63 @@ class FeelTargetWSClient : WebSocketClient {
fun onMsg(str: String)
}
private fun trustAllHosts() {
val trustAllCerts =
arrayOf<TrustManager>(object : X509ExtendedTrustManager() {
override fun checkClientTrusted(
chain: Array<out X509Certificate?>?,
authType: String?,
socket: Socket?
) {
}
override fun checkServerTrusted(
chain: Array<out X509Certificate?>?,
authType: String?,
socket: Socket?
) {
}
override fun checkClientTrusted(
chain: Array<out X509Certificate?>?,
authType: String?,
engine: SSLEngine?
) {
}
override fun checkServerTrusted(
chain: Array<out X509Certificate?>?,
authType: String?,
engine: SSLEngine?
) {
}
override fun checkClientTrusted(
chain: Array<out X509Certificate?>?,
authType: String?
) {
}
override fun checkServerTrusted(
chain: Array<out X509Certificate?>?,
authType: String?
) {
}
override fun getAcceptedIssuers(): Array<out X509Certificate?>? {
return null
}
})
try {
val ssl = SSLContext.getInstance("SSL")
ssl.init(null, trustAllCerts, SecureRandom())
val socketFactory: SSLSocketFactory? = ssl.getSocketFactory()
this.setSocketFactory(socketFactory)
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
......@@ -8,22 +8,26 @@
android:orientation="vertical"
tools:context=".ui.LoginActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/white">
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/white">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="登录"
android:textColor="#3D3D3D"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="登录"
android:textColor="#3D3D3D"
android:textSize="16sp" />
</RelativeLayout>
</RelativeLayout>
<ImageView
......@@ -139,5 +143,8 @@
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
</ScrollView>
\ No newline at end of file
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