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
6c616198
Commit
6c616198
authored
Nov 28, 2025
by
p x
Browse files
调整AVP加载方式
parent
e0a57a35
Changes
7
Show whitespace changes
Inline
Side-by-side
app/src/main/assets/mock/shiche/CarVehicle.txt
View file @
6c616198
{"businessStatus":"DRIVING","spaceName":null,"vehiclePos":[116.502439,39.808918,
327.76611328125
],"routing":[],"progress":null}
{"businessStatus":"DRIVING","spaceName":null,"vehiclePos":[116.502439,39.808918,
null
],"routing":[],"progress":null}
{"businessStatus":"DRIVING","spaceName":null,"vehiclePos":[116.502435,39.808923,327.777099609375],"routing":[],"progress":null}
{"businessStatus":"DRIVING","spaceName":null,"vehiclePos":[116.502432,39.808927,327.843017578125],"routing":[],"progress":null}
{"businessStatus":"DRIVING","spaceName":null,"vehiclePos":[116.502428,39.808932,327.930908203125],"routing":[],"progress":null}
...
...
app/src/main/java/com/sd/cavphmi/highmap/TileJsonBean.kt
View file @
6c616198
package
com.sd.cavphmi.highmap
import
com.sd.cavphmi.utils.MyContants
/**
* 给unity 初始化json
...
...
@@ -11,9 +9,9 @@ import com.sd.cavphmi.utils.MyContants
* @constructor Create empty Tile json bean
*/
class
TileJsonBean
{
var
host
:
String
=
MyContants
.
HOST_MAP
/*
var host: String = MyContants.HOST_MAP
var tiles3d = listOf(
// "/gis_data/3dtiles/road/CurbStrip/tileset.json",
// "/gis_data/3dtiles/road/CurbStrip/tileset.json",
"/gis_data/3dtiles/road/LanePolygon/tileset.json",
"/gis_data/3dtiles/road/RoadSection/tileset.json",
"/gis_data/3dtiles/road/SafetyIsland/tileset.json",
...
...
@@ -22,48 +20,52 @@ class TileJsonBean {
"/gis_data/3dtiles/road/TraMarkA/tileset.json",
"/gis_data/3dtiles/road/TraMarkL/tileset.json",
"/gis_data/3dtiles/road/TraMarkP/tileset.json",
// "/gis_data/3dtiles/roadequip/FieldFacility/tileset.json",
// "/gis_data/3dtiles/roadequip/PlatForm/tileset.json",
// "/gis_data/3dtiles/roadequip/SafetyRail/tileset.json",
// "/gis_data/3dtiles/roadequip/SignStrct/tileset.json",//监控杆子和路标杆子
// "/gis_data/3dtiles/roadequip/StreetLight/tileset.json",//路灯
// "/gis_data/3dtiles/roadequip/TrafficLight/tileset.json",
// "/gis_data/3dtiles/roadequip/TrafficSign/tileset.json",//监控探头和路标牌子
// "/gis_data/3dtiles/roadequip/VideoCamera/tileset.json",
// "/gis_data/3dtiles/roadequip/xinhaodeng/tileset.json",
// "/gis_data/3dtiles/roadequip/baoganji/tileset.json",
// "/gis_data/3dtiles/roadequip/buguangdeng/tileset.json",
// "/gis_data/3dtiles/roadequip/FieldFacility/tileset.json",
// "/gis_data/3dtiles/roadequip/PlatForm/tileset.json",
// "/gis_data/3dtiles/roadequip/SafetyRail/tileset.json",
// "/gis_data/3dtiles/roadequip/SignStrct/tileset.json",//监控杆子和路标杆子
// "/gis_data/3dtiles/roadequip/StreetLight/tileset.json",//路灯
// "/gis_data/3dtiles/roadequip/TrafficLight/tileset.json",
// "/gis_data/3dtiles/roadequip/TrafficSign/tileset.json",//监控探头和路标牌子
// "/gis_data/3dtiles/roadequip/VideoCamera/tileset.json",
// "/gis_data/3dtiles/roadequip/xinhaodeng/tileset.json",
// "/gis_data/3dtiles/roadequip/baoganji/tileset.json",
// "/gis_data/3dtiles/roadequip/buguangdeng/tileset.json",
"/gis_data/3dtiles/roadequip/chongdianzhuang/tileset.json",
// "/gis_data/3dtiles/roadequip/jiaohuanji/tileset.json",
// "/gis_data/3dtiles/roadequip/xinhaoji/tileset.json",
// "/gis_data/3dtiles/roadequip/jiaohuanji/tileset.json",
// "/gis_data/3dtiles/roadequip/xinhaoji/tileset.json",
"/gis_data/3dtiles/roadequip/yidongronghe/tileset.json",
"/gis_data/3dtiles/buildings/tileset.json",
"/gis_data/3dtiles/ground/tileset.json",
// "/gis_data/3dtiles/vegetation/Tree/tileset.json"//树
)
// "/gis_data/3dtiles/vegetation/Tree/tileset.json"//树
)*/
//我本地的
// var host: String = "http://192.168.60.73"
// var tiles3d = listOf("/data/3dtiles/tileset.json")
var
host
:
String
=
"http://192.168.60.73"
var
tiles3d
=
listOf
(
"/data/avp/01road/tileset.json"
,
"/data/avp/02shebei/tileset.json"
,
"/data/avp/04jianzhu/tileset.json"
)
//方本地的
/* var host = "http://192.168.60.164:5003"
var host = "http://192.168.60.73:5003"
var tiles3d = listOf("/data/3dtiles/LanePolygon-o/tileset.json",
// "/data/3dtiles/RoadSection/tileset.json",
// "/data/3dtiles/SafetyIsland/tileset.json",
// "/data/3dtiles/SepStrip/tileset.json",
// "/data/3dtiles/SideWalk/tileset.json",
// "/data/3dtiles/TraMarkA/tileset.json",
// "/data/3dtiles/RoadSection/tileset.json",
// "/data/3dtiles/SafetyIsland/tileset.json",
// "/data/3dtiles/SepStrip/tileset.json",
// "/data/3dtiles/SideWalk/tileset.json",
// "/data/3dtiles/TraMarkA/tileset.json",
"/data/3dtiles/TraMarkL-o/tileset.json",
// "/data/3dtiles/TraMarkP/tileset.json",
// "/data/3dtiles/TraMarkP/tileset.json",
// "/data/3dtiles/SignStrct/tileset.json",
// "/data/3dtiles/TrafficLight/tileset.json",
// "/data/3dtiles/TrafficSign/tileset.json",
//
// "/data/3dtiles/Yizhuang_Unicom_building/tileset.json",
// "/data/3dtiles/Yizhuang_Unicom_Ground/tileset.json"
// "/data/3dtiles/SignStrct/tileset.json",
// "/data/3dtiles/TrafficLight/tileset.json",
// "/data/3dtiles/TrafficSign/tileset.json",
//
// "/data/3dtiles/Yizhuang_Unicom_building/tileset.json",
// "/data/3dtiles/Yizhuang_Unicom_Ground/tileset.json"
)*/
...
...
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
6c616198
...
...
@@ -226,13 +226,13 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
//获取档位
var
gearType
=
avpStatu
.
vehicleContext
.
vehicleDynamic
.
gearType
//画全局路径
mapOpt
.
drawAllLines
(
avpStatu
.
drivenDecision
,
businessStatus
)
mapOpt
.
drawAllLines
(
avpStatu
.
drivenDecision
,
businessStatus
)
//生成小地图路线
mapOpt
.
takeSmallMapLine
(
avpStatu
.
drivenDecision
,
businessStatus
)
mapOpt
.
takeSmallMapLine
(
avpStatu
.
drivenDecision
,
businessStatus
)
//画终点
mapOpt
.
addEndMarker
(
avpStatu
.
drivenDecision
.
endPoint
,
businessStatus
)
mapOpt
.
addEndMarker
(
avpStatu
.
drivenDecision
.
endPoint
,
businessStatus
)
//是否显示车位流光效果
mapOpt
.
showParkLight
(
businessType
,
businessStatus
,
avpStatu
.
space
)
mapOpt
.
showParkLight
(
businessType
,
businessStatus
,
avpStatu
.
space
)
//判断在泊车状态下的倒挡绘制倒车路线,改变镜头视角,,判断车是否到达停车点
mapOpt
.
drawReversePark
(
businessType
,
businessStatus
,
gearType
,
avpStatu
.
space
)
//根据AVP任务状态判停车特效是否关闭
...
...
@@ -304,8 +304,11 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
return
if
(
car
.
vehiclePos
==
null
||
car
.
vehiclePos
.
count
()
<
3
)
return
try
{
var
tHead
=
car
.
vehiclePos
.
get
(
2
)
// try {
if
(
car
.
vehiclePos
.
getOrNull
(
2
)
==
null
)
{
//隐藏小车
return
}
//画小地图小车
mapOpt
.
drawSmallCar
(
car
)
//刷新右下角小车位置
...
...
@@ -315,15 +318,16 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
// println("----car.heading ${car.heading}")
//刷新主车位置
HighMapApi
.
setCarPosition
(
car
.
vehiclePos
!!
.
get
(
2
),
car
.
vehiclePos
.
get
(
2
),
car
.
vehiclePos
.
get
(
1
),
car
.
vehiclePos
.
get
(
0
),
20.80189
// car.elevation
)
}
catch
(
e
:
NullPointerException
)
{
//隐藏小车
}
// } catch (e: NullPointerException) {
// //隐藏小车
// e.printStackTrace()
// }
// setCarCamera(1)
}
...
...
@@ -493,6 +497,11 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
}
override
fun
onWindowFocusChanged
(
hasFocus
:
Boolean
)
{
super
.
onWindowFocusChanged
(
hasFocus
)
mainVm
.
hasFocus
.
value
=
hasFocus
}
override
fun
dispatchKeyEvent
(
event
:
KeyEvent
):
Boolean
{
if
((
event
.
getKeyCode
()
==
KeyEvent
.
KEYCODE_BACK
)
||
event
.
getKeyCode
()
==
KeyEvent
.
KEYCODE_HOME
)
{
// var ft = supportFragmentManager.beginTransaction()
...
...
app/src/main/java/com/sd/cavphmi/ui/fragment/UnityFragment.kt
View file @
6c616198
...
...
@@ -9,18 +9,12 @@ import android.widget.FrameLayout
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.activityViewModels
import
com.sd.cavphmi.highmap.HighMapApi
import
com.sd.cavphmi.viewmodels.MainVm
import
com.sd.cavphmi.viewmodels.UnityMapVm
import
com.unity3d.player.IUnityPlayerLifecycleEvents
import
com.unity3d.player.UnityPlayer
/**
* A simple [Fragment] subclass.
* Use the [UnityFragment.newInstance] factory method to
* create an instance of this fragment.
*/
class
UnityFragment
:
Fragment
(),
IUnityPlayerLifecycleEvents
{
class
UnityFragment
:
Fragment
()
{
// region Lifecycle Management - MUST BE FORWARDED TO UnityPlayer
override
fun
onResume
()
{
super
.
onResume
()
...
...
@@ -44,19 +38,26 @@ class UnityFragment : Fragment(), IUnityPlayerLifecycleEvents {
override
fun
onDestroy
()
{
super
.
onDestroy
()
try
{
this
.
mUnityPlayer
.
destroy
()
}
catch
(
e
:
Exception
)
{
// e.printStackTrace()
// try {
mUnityPlayer
.
destroy
()
// } catch (e: Exception) {
//// e.printStackTrace()
// }
}
override
fun
onDestroyView
()
{
super
.
onDestroyView
()
frameLayout
.
removeView
(
mUnityPlayer
.
rootView
)
}
private
lateinit
var
frameLayout
:
FrameLayout
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
?
{
// 创建一个简单的 FrameLayout 作为 Fragment 的根视图
val
frameLayout
=
FrameLayout
(
requireContext
())
frameLayout
=
FrameLayout
(
requireContext
())
frameLayout
.
layoutParams
=
ViewGroup
.
LayoutParams
(-
1
,
-
1
)
// // 将 UnityPlayer 的视图添加到 FrameLayout 中
mUnityPlayer
.
let
{
unityPlayer
->
...
...
@@ -69,15 +70,15 @@ class UnityFragment : Fragment(), IUnityPlayerLifecycleEvents {
}
override
fun
onUnityPlayerUnloaded
()
{
Log
.
d
(
"UnityFragment"
,
"-----------------onUnityPlayerUnloaded"
)
// Unity 玩家未加载时调用
activity
?.
finish
()
}
override
fun
onUnityPlayerQuitted
()
{
Log
.
d
(
"UnityFragment"
,
"-----------------onUnityPlayerQuitted"
)
}
//
override fun onUnityPlayerUnloaded() {
//
Log.d("UnityFragment", "-----------------onUnityPlayerUnloaded")
//
// Unity 玩家未加载时调用
//
activity?.finish()
//
}
//
//
override fun onUnityPlayerQuitted() {
//
Log.d("UnityFragment", "-----------------onUnityPlayerQuitted")
//
}
// UnityPlayer 实例
...
...
@@ -86,20 +87,24 @@ class UnityFragment : Fragment(), IUnityPlayerLifecycleEvents {
//UNITY map 控制类
private
val
unityMapVm
:
UnityMapVm
by
activityViewModels
()
//主页
private
val
mainVm
:
MainVm
by
activityViewModels
()
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
mUnityPlayer
=
UnityPlayer
(
requireContext
()
,
this
)
mUnityPlayer
=
UnityPlayer
(
requireContext
())
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
// 视图创建完成后,可以在这里进行最终设置
mUnityPlayer
.
windowFocusChanged
(
true
)
// mUnityPlayer.requestFocus()
// mUnityPlayer.windowFocusChanged(true)
// 视图创建完成后,可以在这里进行最终设置
mUnityPlayer
.
requestFocus
()
mUnityPlayer
.
setFocusableInTouchMode
(
true
)
//使用拼接服务器资源加载地图
unityMapVm
.
loadTileJson
()
mUnityPlayer
.
postDelayed
({
//
mUnityPlayer.postDelayed({
// try {
HighMapApi
.
setCarBottomCircle
(
true
)
// HighMapApi.setCameraAngle(90f)
...
...
@@ -108,7 +113,15 @@ class UnityFragment : Fragment(), IUnityPlayerLifecycleEvents {
HighMapApi
.
setCameraDistance
(
6f
)
// } catch (e: Exception) {
// }
},
300
)
// }, 300)
setListener
()
}
private
fun
setListener
()
{
mainVm
.
hasFocus
.
observe
(
viewLifecycleOwner
)
{
hasFocus
->
mUnityPlayer
.
windowFocusChanged
(
hasFocus
)
}
}
...
...
app/src/main/java/com/sd/cavphmi/utils/MyMapUtils.java
View file @
6c616198
...
...
@@ -110,6 +110,7 @@ public class MyMapUtils {
return
average
%
360
;
}
//计算两点距离
public
static
double
cauMyLocDistance
(
double
fromLon
,
double
fromLat
,
double
toLon
,
double
toLat
)
{
var
results
=
new
float
[
4
];
Location
.
distanceBetween
(
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MainVm.kt
View file @
6c616198
...
...
@@ -65,6 +65,8 @@ class MainVm @Inject constructor(
// var mMineMap: MineMap? = null
//Windows 焦点
var
hasFocus
=
MutableLiveData
<
Boolean
>()
//用于拼接
private
val
WSTOKEN
=
"&token=${HTTP_TOKEN}"
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MockVM.kt
View file @
6c616198
...
...
@@ -237,7 +237,7 @@ class MockVM @Inject constructor(
viewModelScope
.
launch
{
var
gson
=
Gson
()
var
datas
=
mutableListOf
<
String
>()
FileIoUtils
.
getAssetMock
(
context
,
"mock/shiche/CarVehicle
_Call
.txt"
,
datas
)
FileIoUtils
.
getAssetMock
(
context
,
"mock/shiche/CarVehicle.txt"
,
datas
)
datas
.
forEach
{
str
->
val
cCar
=
gson
.
fromJson
<
CarVehicle
>(
str
,
CarVehicle
::
class
.
java
)
if
(
cCar
.
vehiclePos
!=
null
)
{
...
...
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