Commit 83c86d2f authored by p x's avatar p x
Browse files

集成高精地图

parent 9968f320
...@@ -3,10 +3,9 @@ package com.sd.cavphmi.utils ...@@ -3,10 +3,9 @@ package com.sd.cavphmi.utils
object MyContants { object MyContants {
// const val IS_DEBUG = true // const val IS_DEBUG = true
//测试环境 //测试环境
var HOST = "https://itg-dev.cu-sc.com:19443/" // var HOST = "https://itg-dev.cu-sc.com:19443/"
//开发环境切勿动 //开发环境切勿动
// var HOST = "https://itg-yz.cu-sc.com:13443" var HOST = "https://itg-yz.cu-sc.com:13443"
// var HOST = "https://itg-yz.cu-sc.com:13443/api/avpweb/"
/***测试环境socket token***/ /***测试环境socket token***/
private val WSTOKEN = private val WSTOKEN =
...@@ -14,20 +13,17 @@ object MyContants { ...@@ -14,20 +13,17 @@ object MyContants {
//登录后拿到Token //登录后拿到Token
var HTTP_TOKEN = var HTTP_TOKEN =
"3W6UeYoWsr3Hged3iJDqw5RQrLyTDwDkkX481PIiuYGwPCamTVdGHhmAxaCgHtns4IaNTEynJ8JfY46bvkzoqqDA9YcGUmkMZ31sV7QAVrk91yOPTv9mCvPLUgOeBgRl" "aQQ8U2YPfcnrKgdwrIXcLXdtKyaFavYfKlWkNn26fenMLE2fIMPtbt5dSJX3qgM4yHZJ9bY4esSMHRH0FCs1nMte9P5qsaThTe7frFD9RAtWdlyWof4yISiTfkp0ZHiB"
// var HTTP_TOKEN =
// "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiIyM2UzYWU3MGZhMGQ0ZGZjYTIwNGU0NzcwOGNjNDJiNiIsImNyZWF0ZVRpbWUiOjE3NTUyNDA0MjcyNzksInVzZXJUeXBlIjoxLCJzb3VyY2UiOjAsInB3ZEV4cGlyZWQiOmZhbHNlLCJ1c2VybmFtZSI6InhpYW9wMDAxIn0.uiSdxuI34J_U3IuMywZNs_adaWoV2fqMsnx-vMxVWXo"
// val Authorization =
// "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiIyM2UzYWU3MGZhMGQ0ZGZjYTIwNGU0NzcwOGNjNDJiNiIsImNyZWF0ZVRpbWUiOjE3NTUyNDA0MjcyNzksInVzZXJUeXBlIjoxLCJzb3VyY2UiOjAsInB3ZEV4cGlyZWQiOmZhbHNlLCJ1c2VybmFtZSI6InhpYW9wMDAxIn0.uiSdxuI34J_U3IuMywZNs_adaWoV2fqMsnx-vMxVWXo"
//仅仅用于测试接口联通性,这里可不传 //仅仅用于测试接口联通性,这里可不传
private val reType = "51world" // private val reType = "51world"
// var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&reType=${reType}&" //跟踪车辆的ID skywell.1ggvlp16.car10 skywell.1ggvlp16.car8
var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&" private val VEHICLEID = "skywell.1ggvlp16.car8"
var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&vehicleId=${VEHICLEID}&"
// var PORT = if (IS_DEBUG) "123" else "34534" // var PORT = if (IS_DEBUG) "123" else "34534"
/***感知目标物 &intersectionCode***/ /***感知目标物 &intersectionCode***/
var WS_FEEL_TARGET = "${WSHOST}msgType=1" var WS_FEEL_TARGET = "${WSHOST}msgType=1&intersectionCode=17"
/***网联车辆位姿 &vehicleId=***/ /***网联车辆位姿 &vehicleId=***/
var WS_VEH_LOC = "${WSHOST}msgType=2" var WS_VEH_LOC = "${WSHOST}msgType=2"
......
...@@ -6,11 +6,14 @@ import androidx.lifecycle.MutableLiveData ...@@ -6,11 +6,14 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.google.gson.Gson import com.google.gson.Gson
import com.sd.cavphmi.base.MyBaseViewModel import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.AvpStatuBean
import com.sd.cavphmi.bean.CarVehicle import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.PerTarget import com.sd.cavphmi.bean.PerTarget
import com.sd.cavphmi.bean.SpaceInfoBean
import com.sd.cavphmi.bean.V2xStartBean import com.sd.cavphmi.bean.V2xStartBean
import com.sd.cavphmi.bean.VToXImgBean import com.sd.cavphmi.bean.VToXImgBean
import com.sd.cavphmi.bean.VehDetailBean import com.sd.cavphmi.bean.VehDetailBean
import com.sd.cavphmi.bean.VehicleStats
import com.sd.cavphmi.net.MyResult import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.AvpDataRepo import com.sd.cavphmi.repositorys.AvpDataRepo
import com.sd.cavphmi.utils.FileIoUtils import com.sd.cavphmi.utils.FileIoUtils
...@@ -19,11 +22,11 @@ import com.sd.cavphmi.utils.ToastHelper ...@@ -19,11 +22,11 @@ import com.sd.cavphmi.utils.ToastHelper
import com.sd.cavphmi.websockets.FeelTargetWSClient import com.sd.cavphmi.websockets.FeelTargetWSClient
import com.sd.cavphmi.websockets.V2xWSClient import com.sd.cavphmi.websockets.V2xWSClient
import com.sd.cavphmi.websockets.VecLocWSClient import com.sd.cavphmi.websockets.VecLocWSClient
import com.sd.cavphmi.websockets.VehStatuWSClient
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.net.URI import java.net.URI
import java.util.Timer
import javax.inject.Inject import javax.inject.Inject
...@@ -46,11 +49,12 @@ class MainVm @Inject constructor( ...@@ -46,11 +49,12 @@ class MainVm @Inject constructor(
//v2x预警socket //v2x预警socket
private var v2xWSClient = V2xWSClient(URI(MyContants.WS_V2X)) private var v2xWSClient = V2xWSClient(URI(MyContants.WS_V2X))
//网联车辆状态
// private var vehStatuWSClient = VehStatuWSClient(URI(MyContants.WS_VEH_STATU))
//socket 管理 //socket 管理
private var sockets = listOf(vecLocWSClient, feelTargetWSClient, v2xWSClient) private var sockets = listOf(vecLocWSClient, feelTargetWSClient, v2xWSClient)
//网联车辆状态
// private var vehStatuWSClient: VehStatuWSClient? = null
//感知延时 //感知延时
// private var preDelayWSClient: PreDelayWSClient? = null // private var preDelayWSClient: PreDelayWSClient? = null
...@@ -67,10 +71,11 @@ class MainVm @Inject constructor( ...@@ -67,10 +71,11 @@ class MainVm @Inject constructor(
lateinit var mockVM: MockVM lateinit var mockVM: MockVM
//是否需要模拟 //是否需要模拟
var isMock = true var isMock = false
//车辆位姿数据 //车辆位姿数据
var carVehicle = MutableLiveData<CarVehicle>() var carVehicle = MutableLiveData<CarVehicle>()
//车辆详情 //车辆详情
var vehDetail = MutableLiveData<VehDetailBean>() var vehDetail = MutableLiveData<VehDetailBean>()
...@@ -81,7 +86,12 @@ class MainVm @Inject constructor( ...@@ -81,7 +86,12 @@ class MainVm @Inject constructor(
var v2xStartBean = MutableLiveData<V2xStartBean>() var v2xStartBean = MutableLiveData<V2xStartBean>()
//联网车辆状态数据 //联网车辆状态数据
// var vehicleStat = MutableLiveData<VehicleStats>() var vehicleStat = MutableLiveData<VehicleStats>()
//avp状态数据
var avpStatu = MutableLiveData<AvpStatuBean>()
//车位占用情况
var spaceInfo = MutableLiveData<SpaceInfoBean>()
//交通感知 //交通感知
// var trafficPerBean = MutableLiveData<TrafficPerBean>() // var trafficPerBean = MutableLiveData<TrafficPerBean>()
...@@ -116,20 +126,56 @@ class MainVm @Inject constructor( ...@@ -116,20 +126,56 @@ class MainVm @Inject constructor(
//获取车辆详情 传{}就行,正常应该是传场地ID,但是亦庄这个和太和桥车是一样的 //获取车辆详情 传{}就行,正常应该是传场地ID,但是亦庄这个和太和桥车是一样的
fun getVehDetail(id: String = "") { fun getVehDetail(id: String = ""): LiveData<VehDetailBean> {
viewModelScope.launch { viewModelScope.launch {
var result = avpDataRepo.getVehDetail(id) var result = avpDataRepo.getVehDetail(id)
when (result) { when (result) {
is MyResult.Success<VehDetailBean> -> { is MyResult.Success<VehDetailBean> -> {
vehDetail.postValue(result.data) vehDetail.postValue(result.data)
// println("-------时间差---- = ${result.data}")
} }
else -> { else -> {
// println("-------Error---- = ${result.msg}")
} }
} }
} }
return vehDetail
}
//HTTP获取车位占用情况
fun getSpaceInfo(): LiveData<SpaceInfoBean> {
viewModelScope.launch {
var result = avpDataRepo.getSpaceInfo()
when (result) {
is MyResult.Success<SpaceInfoBean> -> {
var str = gson.toJson(result)
FileIoUtils.writeToFile(str, "space_info.txt")
spaceInfo.postValue(result.data)
}
else -> {
}
}
}
return spaceInfo
}
//HTTP获取AVP状态
fun getAvpStatus() : LiveData<AvpStatuBean>{
viewModelScope.launch {
var result = avpDataRepo.getAvpStatus()
when (result) {
is MyResult.Success<AvpStatuBean> -> {
var str = gson.toJson(result)
FileIoUtils.writeToFile(str, "avp_status.txt")
avpStatu.postValue(result.data)
}
else -> {
}
}
}
return avpStatu
} }
...@@ -162,8 +208,8 @@ class MainVm @Inject constructor( ...@@ -162,8 +208,8 @@ class MainVm @Inject constructor(
/**感知目标物数据 /**感知目标物数据
*传入intersectionCode 拼接 代表获取某区域的感知物,目前没有数据 *传入intersectionCode=17 拼接 代表获取某区域的感知物,目前没有数据
* **/ */
fun subTarget(): LiveData<PerTarget> { fun subTarget(): LiveData<PerTarget> {
if (isMock) { if (isMock) {
mockVM.onSubTargetMock(targetPre) mockVM.onSubTargetMock(targetPre)
...@@ -213,35 +259,39 @@ class MainVm @Inject constructor( ...@@ -213,35 +259,39 @@ class MainVm @Inject constructor(
} }
//暂时用不到---------------------------------------------
/** /**
* 网联车辆状态 * 网联车辆状态
* */ **/
/* fun subVehicleStatus(): LiveData<VehicleStats> { /* fun subVehicleStatus(): LiveData<VehicleStats> {
try { if (isMock) {
if (vehStatuWSClient == null) {
vehStatuWSClient = VehStatuWSClient(URI(MyContants.WS_VEH_STATU)) } else {
vehStatuWSClient?.connect() try {
vehStatuWSClient.onDataCb = object : VehStatuWSClient.OnDataCb {
vehStatuWSClient?.onDataCb = object : VehStatuWSClient.OnDataCb { override fun onMsg(str: String) {
override fun onMsg(str: String) { viewModelScope.launch {
viewModelScope.launch { FileIoUtils.writeToFile(str, "vehicleS.txt")
FileIoUtils.writeToFile(str, "vehicleS.txt") var bean = gson.fromJson(str, VehicleStats::class.java)
// var bean = gson.fromJson(str, VehicleStats::class.java) vehicleStat.postValue(bean)
// vehicleStat.postValue(bean) }
} }
} }
} if (vehStatuWSClient.isOpen == false) {
} vehStatuWSClient.connect()
} catch (e: Exception) { } else {
e.printStackTrace() vehStatuWSClient.reconnect()
} }
return vehicleStat } catch (e: Exception) {
} e.printStackTrace()
}
}
return vehicleStat
}*/
//暂时用不到---------------------------------------------
*/
/*** 交通(感知)事件**//* /*** 交通(感知)事件**//*
fun subTrafficPre(): LiveData<TrafficPerBean> { fun subTrafficPre(): LiveData<TrafficPerBean> {
try { try {
......
...@@ -65,10 +65,10 @@ class MockVM @Inject constructor( ...@@ -65,10 +65,10 @@ class MockVM @Inject constructor(
parts.forEach { str -> parts.forEach { str ->
delay(1000) delay(1000)
var bean = parseDataBean(str, PerTarget::class.java) var bean = parseDataBean(str, PerTarget::class.java)
println("------模拟感知目标物数据 = ${bean}") // println("------模拟感知目标物数据 = ${bean}")
println("------模拟感知目标物typeName = ${bean.typeName}") // println("------模拟感知目标物typeName = ${bean.typeName}")
println("------模拟感知目标物type = ${bean.type}") // println("------模拟感知目标物type = ${bean.type}")
println("------模拟感知目标物level = ${bean.type}") // println("------模拟感知目标物level = ${bean.type}")
targetPre.value = bean targetPre.value = bean
} }
} }
......
...@@ -21,7 +21,7 @@ class FeelTargetWSClient : WebSocketClient { ...@@ -21,7 +21,7 @@ class FeelTargetWSClient : WebSocketClient {
) )
override fun onOpen(handshakedata: ServerHandshake?) { override fun onOpen(handshakedata: ServerHandshake?) {
// send("Hello, it is me. Mario :)") println(TAG + "------------Hello, 感知目标物")
// System.out.println(TAG + "new connection opened") // System.out.println(TAG + "new connection opened")
} }
...@@ -35,17 +35,17 @@ class FeelTargetWSClient : WebSocketClient { ...@@ -35,17 +35,17 @@ class FeelTargetWSClient : WebSocketClient {
} }
override fun onMessage(bytes: ByteBuffer?) { override fun onMessage(bytes: ByteBuffer?) {
// System.out.println(TAG + " received ByteBuffer") System.out.println(TAG + " received ByteBuffer")
} }
override fun onClose(code: Int, reason: String?, remote: Boolean) { override fun onClose(code: Int, reason: String?, remote: Boolean) {
// System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason); System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason);
} }
override fun onError(ex: Exception?) { override fun onError(ex: Exception?) {
// System.err.println(TAG + "an error occurred:" + ex) System.err.println(TAG + "an error occurred:" + ex)
} }
......
...@@ -25,7 +25,7 @@ class VehStatuWSClient : WebSocketClient { ...@@ -25,7 +25,7 @@ class VehStatuWSClient : WebSocketClient {
override fun onOpen(handshakedata: ServerHandshake?) { override fun onOpen(handshakedata: ServerHandshake?) {
// send("Hello, it is me. Mario :)") // send("Hello, it is me. Mario :)")
System.out.println(TAG + " new connection opened") System.out.println(TAG + " ------------Hello 网联车辆状态")
} }
override fun onMessage(message: String?) { override fun onMessage(message: String?) {
...@@ -38,17 +38,17 @@ class VehStatuWSClient : WebSocketClient { ...@@ -38,17 +38,17 @@ class VehStatuWSClient : WebSocketClient {
} }
override fun onMessage(bytes: ByteBuffer?) { override fun onMessage(bytes: ByteBuffer?) {
// System.out.println(TAG + " received ByteBuffer") System.out.println(TAG + " received ByteBuffer")
} }
override fun onClose(code: Int, reason: String?, remote: Boolean) { override fun onClose(code: Int, reason: String?, remote: Boolean) {
// System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason); System.out.println(TAG + " closed with exit code " + code + " additional info: " + reason);
} }
override fun onError(ex: Exception?) { override fun onError(ex: Exception?) {
// System.err.println(TAG + "an error occurred:" + ex) System.err.println(TAG + "an error occurred:" + ex)
} }
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
...@@ -116,8 +115,20 @@ ...@@ -116,8 +115,20 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="获取车辆信息" android:text="获取车辆信息"
android:visibility="gone"/> android:visibility="visible" />
<Button
android:id="@+id/bt_spaceinfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="车位占用情况"
android:visibility="visible" />
<Button
android:id="@+id/bt_avpstatu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取AVP状态信息"
android:visibility="visible" />
<Button <Button
android:id="@+id/bt_main" android:id="@+id/bt_main"
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
<data> <data>
<!-- <variable--> <!-- <variable-->
<!-- name="vm"--> <!-- name="vm"-->
<!-- type="com.sd.cavphmi.viewmodels.MainVm" />--> <!-- type="com.sd.cavphmi.viewmodels.MainVm" />-->
</data> </data>
...@@ -17,6 +17,14 @@ ...@@ -17,6 +17,14 @@
tools:context=".ui.MainActivity"> tools:context=".ui.MainActivity">
<!-- 高精地图放这里-->
<fragment
android:id="@+id/unityFragment"
class="com.sd.cavphmi.ui.fragment.UnityFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- 车辆仪表--> <!-- 车辆仪表-->
<FrameLayout <FrameLayout
android:id="@+id/map_car_pan" android:id="@+id/map_car_pan"
...@@ -25,13 +33,6 @@ ...@@ -25,13 +33,6 @@
android:layout_marginLeft="@dimen/dp_10" android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10" /> android:layout_marginTop="@dimen/dp_10" />
<!-- 高精地图放这里-->
<fragment
android:id="@+id/map_main"
class="com.sd.cavphmi.ui.fragment.MapMainFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- 预警气泡 从别的醒目扣过来的,就复用这个吧--> <!-- 预警气泡 从别的醒目扣过来的,就复用这个吧-->
<fragment <fragment
...@@ -72,11 +73,12 @@ ...@@ -72,11 +73,12 @@
android:text="V2X预警开始" /> android:text="V2X预警开始" />
<!-- <Button--> <Button
<!-- android:id="@+id/bt_status"--> android:id="@+id/bt_status"
<!-- android:layout_width="wrap_content"--> android:layout_width="wrap_content"
<!-- android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!-- android:text="网联车辆状态" />--> android:text="网联车辆状态"
android:visibility="gone" />
<!-- <Button--> <!-- <Button-->
<!-- android:id="@+id/bt_tarpre"--> <!-- android:id="@+id/bt_tarpre"-->
<!-- android:layout_width="wrap_content"--> <!-- android:layout_width="wrap_content"-->
......
<resources> <resources>
<string name="game_view_content_description">Game view</string>
<string name="app_name">C-adas AVP</string> <string name="app_name">C-adas AVP</string>
<!-- TODO: Remove or change this placeholder text --> <!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string> <string name="hello_blank_fragment">Hello blank fragment</string>
......
...@@ -20,4 +20,5 @@ kotlin.code.style=official ...@@ -20,4 +20,5 @@ kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the # Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies, # resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library # thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true android.nonTransitiveRClass=true
\ No newline at end of file unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist
\ 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