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
C-AVP2.0
Commits
82269164
Commit
82269164
authored
Jan 04, 2026
by
p x
Browse files
泊车本地化
parent
c0af16dd
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
app/src/main/assets/mock/PerTarget.txt
View file @
82269164
This diff is collapsed.
Click to expand it.
app/src/main/java/com/sd/cavphmi/bean/BindCarBean.kt
View file @
82269164
...
@@ -15,11 +15,11 @@ data class BindCarBean(
...
@@ -15,11 +15,11 @@ data class BindCarBean(
data class
BindResult
(
data class
BindResult
(
val
id
:
Int
,
val
id
:
Int
,
val
lastLatitude
:
Any
,
//
val lastLatitude: Any,
val
lastLongitude
:
Any
,
//
val lastLongitude: Any,
val
placeId
:
Int
,
//
val placeId: Int,
val
plateNumber
:
String
,
val
plateNumber
:
String
,
val
vehicleBusinessType
:
String
,
//
val vehicleBusinessType: String,
val
vehicleCode
:
String
,
//
val vehicleCode: String,
val
vin
:
String
//
val vin: String
)
)
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/V2xStartBean.kt
View file @
82269164
...
@@ -4,20 +4,20 @@ package com.sd.cavphmi.bean
...
@@ -4,20 +4,20 @@ package com.sd.cavphmi.bean
* {"id":"39846582477537280","objects":[{"id":"267","name":"Vehicle","longitude":117.3461065,"latitude":38.9985969,"elevation":500.0},{"id":"1600009","name":"Participants","longitude":117.3463289,"latitude":38.9986373,"elevation":500.0}],"type":1,"typeName":"前向碰撞预警","level":1,"startTime":1755582898300,"reportTime":1755582898300}
* {"id":"39846582477537280","objects":[{"id":"267","name":"Vehicle","longitude":117.3461065,"latitude":38.9985969,"elevation":500.0},{"id":"1600009","name":"Participants","longitude":117.3463289,"latitude":38.9986373,"elevation":500.0}],"type":1,"typeName":"前向碰撞预警","level":1,"startTime":1755582898300,"reportTime":1755582898300}
* ***/
* ***/
class
V2xStartBean
{
class
V2xStartBean
{
var
id
:
String
=
""
//
var id: String = ""
var
level
:
Int
=
1
//
var level: Int = 1
var
objects
:
List
<
VObject
>?
=
null
var
objects
:
List
<
VObject
>?
=
null
var
reportTime
:
Long
=
0L
//
var reportTime: Long = 0L
var
startTime
:
Long
=
0L
//
var startTime: Long = 0L
var
type
:
Int
=
-
1
var
type
:
Int
=
-
1
var
typeName
:
String
=
""
var
typeName
:
String
=
""
}
}
//第一个是自己的车 第二个是预警
车
//第一个是自己的车 第二个是预警
物体
data class
VObject
(
data class
VObject
(
var
elevation
:
Double
,
//
var elevation: Double,
var
id
:
String
,
var
id
:
String
,
var
latitude
:
Double
,
//
var latitude: Double,
var
longitude
:
Double
,
//
var longitude: Double,
var
name
:
String
//
var name: String
)
)
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/ui/LoginActivity.kt
View file @
82269164
...
@@ -8,6 +8,7 @@ import androidx.lifecycle.Lifecycle
...
@@ -8,6 +8,7 @@ import androidx.lifecycle.Lifecycle
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.repeatOnLifecycle
import
androidx.lifecycle.repeatOnLifecycle
import
com.jakewharton.rxbinding4.view.clicks
import
com.jakewharton.rxbinding4.view.clicks
import
com.sd.cavphmi.bean.BindResult
import
com.sd.cavphmi.databinding.ActivityLoginBinding
import
com.sd.cavphmi.databinding.ActivityLoginBinding
import
com.sd.cavphmi.ui.dialog.SeleBindCarDialog
import
com.sd.cavphmi.ui.dialog.SeleBindCarDialog
import
com.sd.cavphmi.utils.MMKVUtil
import
com.sd.cavphmi.utils.MMKVUtil
...
@@ -98,35 +99,35 @@ class LoginActivity : AppCompatActivity() {
...
@@ -98,35 +99,35 @@ class LoginActivity : AppCompatActivity() {
//获取可绑定车辆
//获取可绑定车辆
private
fun
getBinderCars
()
{
private
fun
getBinderCars
()
{
// seleBindCarDialog = SeleBindCarDialog.newInstance()
if
(
mainVm
.
isMock
)
{
mainVm
.
getBindCar
().
observe
(
this
)
{
bindCars
->
//id = 27
var
bindCars
=
listOf
(
BindResult
(
27
,
"皖BDJ1106"
))
var
plateNumbers
=
bindCars
.
map
{
it
.
plateNumber
}
var
plateNumbers
=
bindCars
.
map
{
it
.
plateNumber
}
seleBindCarDialog
.
setPlates
(
plateNumbers
)
seleBindCarDialog
.
setPlates
(
plateNumbers
)
seleBindCarDialog
.
itemClickListener
=
object
:
SeleBindCarDialog
.
OnItemClickListener
{
seleBindCarDialog
.
itemClickListener
=
override
fun
onItemClick
(
position
:
Int
)
{
object
:
SeleBindCarDialog
.
OnItemClickListener
{
MyContants
.
VEHICLEID
=
bindCars
.
get
(
position
).
id
override
fun
onItemClick
(
position
:
Int
)
{
startActivity
(
Intent
(
this
@LoginActivity
,
MainActivity
::
class
.
java
))
MyContants
.
VEHICLEID
=
bindCars
.
get
(
position
).
id
finish
()
startActivity
(
Intent
(
this
@LoginActivity
,
MainActivity
::
class
.
java
))
finish
()
}
}
}
}
else
{
mainVm
.
getBindCar
().
observe
(
this
)
{
bindCars
->
var
plateNumbers
=
bindCars
.
map
{
it
.
plateNumber
}
seleBindCarDialog
.
itemClickListener
=
object
:
SeleBindCarDialog
.
OnItemClickListener
{
override
fun
onItemClick
(
position
:
Int
)
{
MyContants
.
VEHICLEID
=
bindCars
.
get
(
position
).
id
startActivity
(
Intent
(
this
@LoginActivity
,
MainActivity
::
class
.
java
))
finish
()
}
}
seleBindCarDialog
.
setPlates
(
plateNumbers
)
}
}
if
(!
seleBindCarDialog
.
isAdded
)
{
}
seleBindCarDialog
.
showNow
(
supportFragmentManager
,
"seleBindCarDialog"
)
if
(!
seleBindCarDialog
.
isAdded
)
{
}
seleBindCarDialog
.
showNow
(
supportFragmentManager
,
"seleBindCarDialog"
)
// val dialog = CustomListDialog(this, "选择车辆", plateNumbers)
// dialog.setOnItemClickListener(object : CustomListDialog.OnItemClickListener {
// override fun onItemClick(position: Int, selectedItem: String) {
//// Toast.makeText(
//// this@LoginActivity,
//// "点击了第${position + 1}项: $selectedItem",
//// Toast.LENGTH_SHORT
//// ).show()
// MyContants.VEHICLEID = bindCars.get(position).id
// startActivity(Intent(this@LoginActivity, MainActivity::class.java))
// finish()
// }
// })
// dialog.show()
}
}
}
}
...
...
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
82269164
...
@@ -32,6 +32,7 @@ import com.sd.cavphmi.ui.fragment.CarPanelFragment
...
@@ -32,6 +32,7 @@ import com.sd.cavphmi.ui.fragment.CarPanelFragment
import
com.sd.cavphmi.ui.fragment.ExoPlayFragment
import
com.sd.cavphmi.ui.fragment.ExoPlayFragment
import
com.sd.cavphmi.utils.AvpContants
import
com.sd.cavphmi.utils.AvpContants
import
com.sd.cavphmi.utils.DisplayUtil
import
com.sd.cavphmi.utils.DisplayUtil
import
com.sd.cavphmi.utils.ToastHelper
import
com.sd.cavphmi.viewmodels.MainVm
import
com.sd.cavphmi.viewmodels.MainVm
import
com.sd.cavphmi.viewmodels.MapOpt
import
com.sd.cavphmi.viewmodels.MapOpt
import
com.sd.cavphmi.viewmodels.MockVM
import
com.sd.cavphmi.viewmodels.MockVM
...
@@ -164,13 +165,15 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
...
@@ -164,13 +165,15 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
override
fun
getToData
()
{
override
fun
getToData
()
{
if
(!
mainVm
.
isMock
)
{
if
(!
mainVm
.
isMock
)
{
//开启websocket
//开启AVP状态(HTTP SSE)
getTarget
()
getV2x
()
//开启2个HTTP sse
getCarVehicle
()
getAvpStatus
()
getAvpStatus
()
}
}
//开启V2X预警
getV2x
()
//开启感知物websocket
getTarget
()
//开启车辆位姿
getCarVehicle
()
//获取车位占用情况
//获取车位占用情况
// getSpaceInfo()
// getSpaceInfo()
}
}
...
@@ -240,12 +243,42 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
...
@@ -240,12 +243,42 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
mapOpt
.
showParkLight
(
businessType
,
businessStatus
,
avpStatu
.
space
)
mapOpt
.
showParkLight
(
businessType
,
businessStatus
,
avpStatu
.
space
)
//判断在泊车状态下的倒挡绘制倒车路线,改变镜头视角,,判断车是否到达停车点
//判断在泊车状态下的倒挡绘制倒车路线,改变镜头视角,,判断车是否到达停车点
mapOpt
.
drawReversePark
(
businessType
,
businessStatus
,
gearType
,
avpStatu
.
space
)
mapOpt
.
drawReversePark
(
businessType
,
businessStatus
,
gearType
,
avpStatu
.
space
)
//显示提示
tip
(
businessType
,
businessStatus
)
//重置变量
//重置变量
resetVariable
(
businessStatus
)
resetVariable
(
businessStatus
)
//根据AVP任务状态判停车特效是否关闭
//根据AVP任务状态判停车特效是否关闭
// mapOpt.showEffectAvpStatu(businessType, businessStatus)
// mapOpt.showEffectAvpStatu(businessType, businessStatus)
}
}
/***重置变量**/
private
fun
resetVariable
(
businessStatus
:
String
)
{
if
(
businessStatus
==
AvpContants
.
TRANSPORT_COMPLETED
||
businessStatus
==
AvpContants
.
TRANSPORT_CANCELED
)
{
mainVm
.
isGetVehDetail
=
false
// mapOpt.smallMapLine = false
mapOpt
.
sliceIndex
=
0
// mapOpt.isDrawAreaCount = false
}
}
/***提示业务完成状态**/
private
fun
tip
(
businessType
:
String
,
businessStatus
:
String
)
{
if
(
businessType
==
AvpContants
.
PARK_TYPE
)
{
when
(
businessStatus
)
{
AvpContants
.
PARK_COMPLETED
->
{
ToastHelper
.
showShort
(
this
,
"泊车完成"
)
}
}
}
else
if
(
businessType
==
AvpContants
.
CALL_TYPE
)
{
when
(
businessStatus
)
{
AvpContants
.
TRANSPORT_COMPLETED
->
{
ToastHelper
.
showShort
(
this
,
"召车完成"
)
}
}
}
}
/***是否展示车内视频****/
/***是否展示车内视频****/
private
fun
isCarVideo
(
businessStatus
:
String
)
{
private
fun
isCarVideo
(
businessStatus
:
String
)
{
if
(
businessStatus
==
AvpContants
.
TRANSPORT_PROGRESS
)
{
if
(
businessStatus
==
AvpContants
.
TRANSPORT_PROGRESS
)
{
...
@@ -256,15 +289,6 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
...
@@ -256,15 +289,6 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
}
}
}
}
/***重置变量**/
private
fun
resetVariable
(
businessStatus
:
String
)
{
if
(
businessStatus
==
AvpContants
.
TRANSPORT_COMPLETED
||
businessStatus
==
AvpContants
.
TRANSPORT_CANCELED
)
{
mainVm
.
isGetVehDetail
=
false
// mapOpt.smallMapLine = false
mapOpt
.
sliceIndex
=
0
// mapOpt.isDrawAreaCount = false
}
}
//联网车辆位姿数据
//联网车辆位姿数据
private
fun
getCarVehicle
()
{
private
fun
getCarVehicle
()
{
...
@@ -276,9 +300,9 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
...
@@ -276,9 +300,9 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
}
}
}
}
//召车的时候临时开一下
//召车的时候临时开一下
mainVm
.
targetPre
.
observe
(
this
)
{
/*
mainVm.targetPre.observe(this) {
showPre(it)
showPre(it)
}
}
*/
}
}
//显示车辆位姿UI
//显示车辆位姿UI
...
@@ -291,7 +315,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
...
@@ -291,7 +315,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
mapOpt
.
drawSmallCar
(
car
)
mapOpt
.
drawSmallCar
(
car
)
//刷新右下角小车位置
//刷新右下角小车位置
mapOpt
.
showNavingCarPosition
(
car
)
mapOpt
.
showNavingCarPosition
(
car
)
//
生成车前方
矩形
//
车四周生成
矩形
mapOpt
.
genFronArea
(
car
)
mapOpt
.
genFronArea
(
car
)
//刷新右下角小地图路径
//刷新右下角小地图路径
mapOpt
.
upSmallMapLine
()
mapOpt
.
upSmallMapLine
()
...
...
app/src/main/java/com/sd/cavphmi/ui/fragment/DistantTipFragment.kt
View file @
82269164
...
@@ -100,7 +100,7 @@ class DistantTipFragment : Fragment() {
...
@@ -100,7 +100,7 @@ class DistantTipFragment : Fragment() {
// endPoint.longitude
// endPoint.longitude
// ).toInt()
// ).toInt()
if
(
businessType
==
AvpContants
.
P
ark
_TYPE
)
{
if
(
businessType
==
AvpContants
.
P
ARK
_TYPE
)
{
when
(
businessStatus
)
{
when
(
businessStatus
)
{
AvpContants
.
TRANSPORT_PROGRESS
->
{
AvpContants
.
TRANSPORT_PROGRESS
->
{
takeStr
(
distance
,
1
)
takeStr
(
distance
,
1
)
...
...
app/src/main/java/com/sd/cavphmi/ui/fragment/UnityFragment.kt
View file @
82269164
...
@@ -15,7 +15,6 @@ import com.unity3d.player.IUnityPlayerLifecycleEvents
...
@@ -15,7 +15,6 @@ import com.unity3d.player.IUnityPlayerLifecycleEvents
import
com.unity3d.player.UnityPlayer
import
com.unity3d.player.UnityPlayer
class
UnityFragment
:
Fragment
()
{
class
UnityFragment
:
Fragment
()
{
// region Lifecycle Management - MUST BE FORWARDED TO UnityPlayer
override
fun
onResume
()
{
override
fun
onResume
()
{
super
.
onResume
()
super
.
onResume
()
mUnityPlayer
.
onResume
()
mUnityPlayer
.
onResume
()
...
@@ -66,21 +65,8 @@ class UnityFragment : Fragment() {
...
@@ -66,21 +65,8 @@ class UnityFragment : Fragment() {
frameLayout
.
addView
(
unityPlayer
,
layoutParams
)
frameLayout
.
addView
(
unityPlayer
,
layoutParams
)
}
}
return
frameLayout
return
frameLayout
// return inflater.inflate(R.layout.fragment_unity, container, false)
}
}
// override fun onUnityPlayerUnloaded() {
// Log.d("UnityFragment", "-----------------onUnityPlayerUnloaded")
// // Unity 玩家未加载时调用
// activity?.finish()
// }
//
// override fun onUnityPlayerQuitted() {
// Log.d("UnityFragment", "-----------------onUnityPlayerQuitted")
// }
// UnityPlayer 实例
// UnityPlayer 实例
private
lateinit
var
mUnityPlayer
:
UnityPlayer
private
lateinit
var
mUnityPlayer
:
UnityPlayer
...
@@ -98,8 +84,6 @@ class UnityFragment : Fragment() {
...
@@ -98,8 +84,6 @@ class UnityFragment : Fragment() {
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
super
.
onViewCreated
(
view
,
savedInstanceState
)
// 视图创建完成后,可以在这里进行最终设置
// 视图创建完成后,可以在这里进行最终设置
// mUnityPlayer.windowFocusChanged(true)
// 视图创建完成后,可以在这里进行最终设置
mUnityPlayer
.
requestFocus
()
mUnityPlayer
.
requestFocus
()
mUnityPlayer
.
setFocusableInTouchMode
(
true
)
mUnityPlayer
.
setFocusableInTouchMode
(
true
)
//使用拼接服务器资源加载地图
//使用拼接服务器资源加载地图
...
@@ -107,8 +91,6 @@ class UnityFragment : Fragment() {
...
@@ -107,8 +91,6 @@ class UnityFragment : Fragment() {
// mUnityPlayer.postDelayed({
// mUnityPlayer.postDelayed({
// try {
// try {
HighMapApi
.
setCarBottomCircle
(
true
)
HighMapApi
.
setCarBottomCircle
(
true
)
// HighMapApi.setCameraAngle(90f)
// HighMapApi.setCameraDistance(80f)
HighMapApi
.
setCameraAngle
(
30f
)
HighMapApi
.
setCameraAngle
(
30f
)
HighMapApi
.
setCameraDistance
(
8f
)
HighMapApi
.
setCameraDistance
(
8f
)
// } catch (e: Exception) {
// } catch (e: Exception) {
...
...
app/src/main/java/com/sd/cavphmi/utils/AvpContants.kt
View file @
82269164
...
@@ -5,7 +5,7 @@ object AvpContants {
...
@@ -5,7 +5,7 @@ object AvpContants {
//业务类型
//业务类型
val
NIL_TYPE
=
"NIL"
val
NIL_TYPE
=
"NIL"
val
CALL_TYPE
=
"Call"
val
CALL_TYPE
=
"Call"
val
P
ark
_TYPE
=
"Park"
val
P
ARK
_TYPE
=
"Park"
//档位
//档位
val
GEAR_REVERSE
=
"REVERSE"
val
GEAR_REVERSE
=
"REVERSE"
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MainVm.kt
View file @
82269164
...
@@ -102,7 +102,7 @@ class MainVm @Inject constructor(
...
@@ -102,7 +102,7 @@ class MainVm @Inject constructor(
lateinit
var
mockVM
:
MockVM
lateinit
var
mockVM
:
MockVM
//是否需要模拟
//是否需要模拟
var
isMock
=
fals
e
var
isMock
=
tru
e
//车辆位姿数据
//车辆位姿数据
// var carVehicle = MutableLiveData<CarVehicle>()
// var carVehicle = MutableLiveData<CarVehicle>()
...
@@ -254,8 +254,13 @@ class MainVm @Inject constructor(
...
@@ -254,8 +254,13 @@ class MainVm @Inject constructor(
fun
subVehicle
():
StateFlow
<
CarVehicle
>
{
fun
subVehicle
():
StateFlow
<
CarVehicle
>
{
if
(
isMock
)
{
if
(
isMock
)
{
// mockVM.subVehicle(carVehicle)
// mockVM.subVehicle(carVehicle)
// mockVM.onVehicleMockPark(carVehicle)
viewModelScope
.
launch
{
mockVM
.
onVehicleMockCall
(
carVehicle
,
targetPre
)
delay
(
20000
)
//模拟泊车
mockVM
.
onVehicleMockPark
(
carVehicle
,
v2xStartBean
)
delay
(
3000
)
}
// mockVM.onVehicleMockCall(carVehicle, targetPre,v2xStartBean)
}
else
{
}
else
{
var
url
=
"${MyContants.HOST}/api/avpweb/hmi/monitor/v1/monitorDrivenStatus"
var
url
=
"${MyContants.HOST}/api/avpweb/hmi/monitor/v1/monitorDrivenStatus"
carCb
.
url
=
url
carCb
.
url
=
url
...
@@ -416,6 +421,7 @@ class MainVm @Inject constructor(
...
@@ -416,6 +421,7 @@ class MainVm @Inject constructor(
//开启预警特效
//开启预警特效
fun
startWarning
(
ptcId
:
String
)
{
fun
startWarning
(
ptcId
:
String
)
{
viewModelScope
.
launch
{
viewModelScope
.
launch
{
toggleCircleRadar
(
2
)
var
warnPtc
=
WarnPtc
().
apply
{
var
warnPtc
=
WarnPtc
().
apply
{
ptcid
=
ptcId
ptcid
=
ptcId
isRed
=
true
isRed
=
true
...
@@ -426,7 +432,6 @@ class MainVm @Inject constructor(
...
@@ -426,7 +432,6 @@ class MainVm @Inject constructor(
warnPtc
.
isRed
=
false
warnPtc
.
isRed
=
false
HighMapApi
.
setWarnPtc
(
warns
)
HighMapApi
.
setWarnPtc
(
warns
)
}
}
toggleCircleRadar
(
2
)
}
}
/**开启预警(光圈和雷达)
/**开启预警(光圈和雷达)
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MapOpt.kt
View file @
82269164
...
@@ -64,11 +64,7 @@ class MapOpt @Inject constructor(
...
@@ -64,11 +64,7 @@ class MapOpt @Inject constructor(
//车四周矩形
//车四周矩形
private
var
roundArea
:
Polygon
?
=
null
private
var
roundArea
:
Polygon
?
=
null
//锁
//小地图线
// private var cenAreaLock = CenAreaLock()
// 小地图路径坐标点串 (02坐标系)
// private var coordinateSeries = ArrayList<DoubleArray>()
private
var
sPolyline
:
Polyline
?
=
null
private
var
sPolyline
:
Polyline
?
=
null
//是否进入泊车倒车状态
//是否进入泊车倒车状态
...
@@ -175,8 +171,6 @@ class MapOpt @Inject constructor(
...
@@ -175,8 +171,6 @@ class MapOpt @Inject constructor(
return
return
}
}
// if (smallMapLine)
// if (smallMapLine)
// return
// if (coordinateSeries.count() > 0)
// return
// return
if
(
drivenDecision
.
trajectory
.
points
.
count
()
>
0
)
{
if
(
drivenDecision
.
trajectory
.
points
.
count
()
>
0
)
{
// smallMapLine = true
// smallMapLine = true
...
@@ -205,7 +199,7 @@ class MapOpt @Inject constructor(
...
@@ -205,7 +199,7 @@ class MapOpt @Inject constructor(
//当前车辆位置
//当前车辆位置
// var latlng = LatLng(carVehicle.vehiclePos!!.get(1), carVehicle.vehiclePos.get(0))
// var latlng = LatLng(carVehicle.vehiclePos!!.get(1), carVehicle.vehiclePos.get(0))
viewModelScope
.
launch
(
Dispatchers
.
Default
)
{
viewModelScope
.
launch
(
Dispatchers
.
Default
)
{
//算出线段与车辆四周面的相交
//算出线段与车辆四周面的相交
的下标
var
crossIndex
=
MyGeoTools
.
cauLineContainsArea
(
roundArea
,
lineString
)
var
crossIndex
=
MyGeoTools
.
cauLineContainsArea
(
roundArea
,
lineString
)
//点没有平均分配,前三分一8个点,后三分之一3个点
//点没有平均分配,前三分一8个点,后三分之一3个点
// println("-----------相交线段下标 crossIndex = ${crossIndex}")
// println("-----------相交线段下标 crossIndex = ${crossIndex}")
...
@@ -246,10 +240,10 @@ class MapOpt @Inject constructor(
...
@@ -246,10 +240,10 @@ class MapOpt @Inject constructor(
val
MU
=
100000
val
MU
=
100000
var
minLat
=
Math
.
min
(
lat1
,
lat2
).
times
(
MU
).
toInt
()
-
1
0
var
minLat
=
Math
.
min
(
lat1
,
lat2
).
times
(
MU
).
toInt
()
-
2
0
var
maxLat
=
Math
.
max
(
lat1
,
lat2
).
times
(
MU
).
toInt
()
+
1
0
var
maxLat
=
Math
.
max
(
lat1
,
lat2
).
times
(
MU
).
toInt
()
+
2
0
var
minLon
=
Math
.
min
(
lon1
,
lon2
).
times
(
MU
).
toInt
()
-
1
0
var
minLon
=
Math
.
min
(
lon1
,
lon2
).
times
(
MU
).
toInt
()
-
2
0
var
maxLon
=
Math
.
max
(
lon1
,
lon2
).
times
(
MU
).
toInt
()
+
1
0
var
maxLon
=
Math
.
max
(
lon1
,
lon2
).
times
(
MU
).
toInt
()
+
2
0
var
rect
=
Rect
(
var
rect
=
Rect
(
minLon
,
minLat
,
maxLon
,
maxLat
minLon
,
minLat
,
maxLon
,
maxLat
...
@@ -264,12 +258,14 @@ class MapOpt @Inject constructor(
...
@@ -264,12 +258,14 @@ class MapOpt @Inject constructor(
/**画路径起终点***/
/**画路径起终点***/
fun
addEndMarker
(
endPoint
:
EndPoint
,
businessStatus
:
String
)
{
fun
addEndMarker
(
endPoint
:
EndPoint
,
businessStatus
:
String
)
{
if
(
businessStatus
==
AvpContants
.
TRANSPORT_COMPLETED
||
businessStatus
==
AvpContants
.
TRANSPORT_CANCELED
)
{
if
(
businessStatus
==
AvpContants
.
TRANSPORT_COMPLETED
||
businessStatus
==
AvpContants
.
TRANSPORT_CANCELED
||
businessStatus
==
AvpContants
.
PARK_COMPLETED
)
{
//删除终点marker
//删除终点marker
deleteEndMarker
()
deleteEndMarker
()
return
return
}
}
if
(
pEndMarker
==
null
)
{
if
(
pEndMarker
==
null
&&
endPoint
!=
null
)
{
var
mEndPoint
=
LatLng
(
endPoint
.
latitude
,
endPoint
.
longitude
)
var
mEndPoint
=
LatLng
(
endPoint
.
latitude
,
endPoint
.
longitude
)
val
end_icon
=
BitmapFactory
.
decodeResource
(
context
.
resources
,
R
.
drawable
.
plan_end
)
val
end_icon
=
BitmapFactory
.
decodeResource
(
context
.
resources
,
R
.
drawable
.
plan_end
)
pEndMarker
=
mMineMap
?.
addMarker
(
pEndMarker
=
mMineMap
?.
addMarker
(
...
@@ -283,7 +279,7 @@ class MapOpt @Inject constructor(
...
@@ -283,7 +279,7 @@ class MapOpt @Inject constructor(
fun
drawReversePark
(
fun
drawReversePark
(
businessType
:
String
,
businessStatus
:
String
,
gearType
:
String
,
space
:
Space
businessType
:
String
,
businessStatus
:
String
,
gearType
:
String
,
space
:
Space
)
{
)
{
if
(
businessType
==
AvpContants
.
P
ark
_TYPE
)
{
if
(
businessType
==
AvpContants
.
P
ARK
_TYPE
)
{
if
(
businessStatus
==
AvpContants
.
TRANSPORT_COMPLETED
)
{
//到达停车点
if
(
businessStatus
==
AvpContants
.
TRANSPORT_COMPLETED
)
{
//到达停车点
HighMapApi
.
setCameraDistance
(
30f
)
HighMapApi
.
setCameraDistance
(
30f
)
HighMapApi
.
setCameraAngle
(
60f
)
HighMapApi
.
setCameraAngle
(
60f
)
...
@@ -316,15 +312,17 @@ class MapOpt @Inject constructor(
...
@@ -316,15 +312,17 @@ class MapOpt @Inject constructor(
//是否显示车位流光效果
//是否显示车位流光效果
fun
showParkLight
(
businessType
:
String
,
businessStatus
:
String
,
space
:
Space
)
{
fun
showParkLight
(
businessType
:
String
,
businessStatus
:
String
,
space
:
Space
)
{
if
(
businessType
==
AvpContants
.
P
ark
_TYPE
)
{
if
(
businessType
==
AvpContants
.
P
ARK
_TYPE
)
{
if
(
businessStatus
==
AvpContants
.
PARK_COMPLETED
)
{
if
(
businessStatus
==
AvpContants
.
PARK_COMPLETED
)
{
//消除车位流光特效
//消除车位流光特效
HighMapApi
.
parkRoundLight
(
""
)
HighMapApi
.
parkRoundLight
(
""
)
}
else
if
(
space
==
null
)
{
HighMapApi
.
parkRoundLight
(
""
)
}
else
{
}
else
{
HighMapApi
.
parkRoundLight
(
space
.
name
)
HighMapApi
.
parkRoundLight
(
space
.
name
)
}
}
}
else
{
}
else
{
//
HighMapApi.parkRoundLight("")
HighMapApi
.
parkRoundLight
(
""
)
}
}
}
}
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MockVM.kt
View file @
82269164
...
@@ -25,6 +25,7 @@ import com.sd.cavphmi.bean.CarPanelBean
...
@@ -25,6 +25,7 @@ import com.sd.cavphmi.bean.CarPanelBean
import
com.sd.cavphmi.bean.CarVehicle
import
com.sd.cavphmi.bean.CarVehicle
import
com.sd.cavphmi.bean.PerceptionBean
import
com.sd.cavphmi.bean.PerceptionBean
import
com.sd.cavphmi.bean.V2xStartBean
import
com.sd.cavphmi.bean.V2xStartBean
import
com.sd.cavphmi.bean.VObject
import
com.sd.cavphmi.bean.mock.MRoutes
import
com.sd.cavphmi.bean.mock.MRoutes
import
com.sd.cavphmi.bean.mock.ParkPath
import
com.sd.cavphmi.bean.mock.ParkPath
import
com.sd.cavphmi.highmap.AllLine
import
com.sd.cavphmi.highmap.AllLine
...
@@ -76,7 +77,7 @@ class MockVM @Inject constructor(
...
@@ -76,7 +77,7 @@ class MockVM @Inject constructor(
* @param binding 里的速度
* @param binding 里的速度
* **/
* **/
fun
onVehicleMockPark
(
fun
onVehicleMockPark
(
carVehicle
:
MutableStateFlow
<
CarVehicle
>
carVehicle
:
MutableStateFlow
<
CarVehicle
>
,
v2xStartBean
:
MutableLiveData
<
V2xStartBean
>
)
{
)
{
// HighMapApi.setCameraAngle(30f)
// HighMapApi.setCameraAngle(30f)
viewModelScope
.
launch
{
viewModelScope
.
launch
{
...
@@ -121,9 +122,34 @@ class MockVM @Inject constructor(
...
@@ -121,9 +122,34 @@ class MockVM @Inject constructor(
var
bearing
=
0f
var
bearing
=
0f
val
random
=
Random
val
random
=
Random
mRoutes
.
rs
.
forEachIndexed
{
index
,
it
->
mRoutes
.
rs
.
forEachIndexed
{
index
,
it
->
if
(
index
==
8
)
{
//紧急制动预警
var
v2x
=
V2xStartBean
().
apply
{
type
=
6
objects
=
listOf
(
VObject
(
""
),
VObject
(
"f117fdfa-feff-0100-85dc-35850000acb0"
))
}
v2xStartBean
.
postValue
(
v2x
)
}
else
if
(
index
==
30
)
{
//前向碰撞
var
v2x
=
V2xStartBean
().
apply
{
type
=
1
objects
=
listOf
(
VObject
(
""
),
VObject
(
"f117fdfa-feff-0100-85dc-35850000acb0"
))
}
v2xStartBean
.
postValue
(
v2x
)
}
else
if
(
index
==
60
)
{
//弱势交通参与者
var
v2x
=
V2xStartBean
().
apply
{
type
=
12
objects
=
listOf
(
VObject
(
""
),
VObject
(
"50332456-3030-3030-3530-303334533955"
))
}
v2xStartBean
.
postValue
(
v2x
)
}
//变速
//变速
CarPanelBean
.
instance
.
speed
.
set
(
random
.
nextInt
(
10
..
15
))
CarPanelBean
.
instance
.
speed
.
set
(
random
.
nextInt
(
10
..
15
))
//一边移动一把你计算航向角
if
(
index
>
0
&&
index
<
mRoutes
.
rs
.
count
())
{
if
(
index
>
0
&&
index
<
mRoutes
.
rs
.
count
())
{
var
p1
=
mRoutes
.
rs
.
get
(
index
-
1
)
var
p1
=
mRoutes
.
rs
.
get
(
index
-
1
)
var
pc
=
mRoutes
.
rs
.
get
(
index
)
var
pc
=
mRoutes
.
rs
.
get
(
index
)
...
@@ -261,7 +287,8 @@ class MockVM @Inject constructor(
...
@@ -261,7 +287,8 @@ class MockVM @Inject constructor(
//召车 航向角 238.38134765625
//召车 航向角 238.38134765625
fun
onVehicleMockCall
(
fun
onVehicleMockCall
(
carVehicle
:
MutableStateFlow
<
CarVehicle
>,
carVehicle
:
MutableStateFlow
<
CarVehicle
>,
targetPre
:
MutableLiveData
<
PerceptionBean
>?
targetPre
:
MutableLiveData
<
PerceptionBean
>,
v2xStartBean
:
MutableLiveData
<
V2xStartBean
>
)
{
)
{
viewModelScope
.
launch
{
viewModelScope
.
launch
{
//初始镜头角度
//初始镜头角度
...
@@ -320,7 +347,7 @@ class MockVM @Inject constructor(
...
@@ -320,7 +347,7 @@ class MockVM @Inject constructor(
if
(
index
<=
139
)
{
if
(
index
<=
139
)
{
//正在小心翼翼的出库
//正在小心翼翼的出库
CarPanelBean
.
instance
.
speed
.
set
(
random
.
nextInt
(
1
..
5
))
CarPanelBean
.
instance
.
speed
.
set
(
random
.
nextInt
(
1
..
5
))
}
else
{
}
else
{
//开起来了
//开起来了
CarPanelBean
.
instance
.
speed
.
set
(
random
.
nextInt
(
10
..
16
))
CarPanelBean
.
instance
.
speed
.
set
(
random
.
nextInt
(
10
..
16
))
}
}
...
@@ -523,6 +550,7 @@ class MockVM @Inject constructor(
...
@@ -523,6 +550,7 @@ class MockVM @Inject constructor(
//感知目标物
//感知目标物
fun
onSubTargetMock
(
targetPre
:
MutableLiveData
<
PerceptionBean
>)
{
fun
onSubTargetMock
(
targetPre
:
MutableLiveData
<
PerceptionBean
>)
{
viewModelScope
.
launch
{
viewModelScope
.
launch
{
delay
(
20000
)
val
parts
=
mutableListOf
<
String
>()
val
parts
=
mutableListOf
<
String
>()
FileIoUtils
.
getAssetMock
(
context
,
"mock/PerTarget.txt"
,
parts
)
FileIoUtils
.
getAssetMock
(
context
,
"mock/PerTarget.txt"
,
parts
)
var
temp
=
""
var
temp
=
""
...
...
app/src/main/res/layout/activity_login.xml
View file @
82269164
...
@@ -153,7 +153,7 @@
...
@@ -153,7 +153,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:text=
"直接到首页"
android:text=
"直接到首页"
android:visibility=
"
visibl
e"
/>
android:visibility=
"
gon
e"
/>
</LinearLayout>
</LinearLayout>
...
...
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