Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
SuZhouAvp
Commits
bb95327c
Commit
bb95327c
authored
Sep 12, 2025
by
罗小雨
Browse files
本地模拟感知物数据实现变红、清除感知物
parent
36c48341
Changes
11
Hide whitespace changes
Inline
Side-by-side
app/src/main/java/com/sd/cavphmi/bean/PerTargetTest.kt
0 → 100644
View file @
bb95327c
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
app/src/main/java/com/sd/cavphmi/highmap/HighMapApi.kt
View file @
bb95327c
package
com.sd.cavphmi.highmap
import
com.google.gson.Gson
import
com.ltzw.adasdriver.highmap.TileJsonBean
import
com.unity3d.player.UnityPlayer
...
...
app/src/main/java/com/sd/cavphmi/highmap/PtcData.kt
View file @
bb95327c
package
com.sd.cavphmi.highmap
import
com.ltzw.adasdriver.utils.MyContants
/**
* 感知物数据
...
...
app/src/main/java/com/sd/cavphmi/highmap/TileJsonBean.kt
View file @
bb95327c
package
com.sd.cavphmi.highmap
import
com.ltzw.adasdriver.utils.MyContants
import
com.sd.cavphmi.utils.MyContants
/**
* 给unity 初始化json
...
...
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
bb95327c
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
()
...
...
app/src/main/java/com/sd/cavphmi/ui/fragment/CarPanelFragment.kt
View file @
bb95327c
...
...
@@ -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)
}
}
...
...
app/src/main/java/com/sd/cavphmi/utils/MyContants.kt
View file @
bb95327c
...
...
@@ -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"
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MainVm.kt
View file @
bb95327c
...
...
@@ -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
=
fals
e
var
isMock
=
tru
e
//车辆位姿数据
var
carVehicle
=
MutableLiveData
<
CarVehicle
>()
...
...
@@ -80,7 +81,7 @@ class MainVm @Inject constructor(
var
vehDetail
=
MutableLiveData
<
VehDetailBean
>()
//感知目标物
var
targetPre
=
MutableLiveData
<
PerTarget
>()
var
targetPre
=
MutableLiveData
<
PerTarget
Test
>()
//v2x 预警
var
v2xStartBean
=
MutableLiveData
<
V2xStartBean
>()
...
...
@@ -212,7 +213,7 @@ class MainVm @Inject constructor(
/**感知目标物数据
*传入intersectionCode=17 拼接 代表获取某区域的感知物,目前没有数据
*/
fun
subTarget
():
LiveData
<
PerTarget
>
{
fun
subTarget
():
LiveData
<
PerTarget
Test
>
{
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
,
PerTarget
Test
::
class
.
java
)
targetPre
.
postValue
(
bean
)
}
}
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MockVM.kt
View file @
bb95327c
...
...
@@ -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
<
PerTarget
Test
>)
{
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
,
PerTarget
Test
::
class
.
java
)
// println("------模拟感知目标物数据 = ${bean}")
// println("------模拟感知目标物typeName = ${bean.typeName}")
// println("------模拟感知目标物type = ${bean.type}")
...
...
app/src/main/java/com/sd/cavphmi/websockets/FeelTargetWSClient.kt
View file @
bb95327c
...
...
@@ -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
app/src/main/res/layout/activity_login.xml
View file @
bb95327c
<?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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment