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

集成高精地图

parent 9968f320
......@@ -60,9 +60,12 @@
<activity
android:name=".ui.MainActivity"
android:exported="true"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:exported="false"
android:hardwareAccelerated="false"
android:launchMode="singleTask"
android:screenOrientation="landscape"/>
android:resizeableActivity="false"
android:screenOrientation="fullUser"/>
<!-- <activity-->
<!-- android:name=".ui.BootActivity"-->
......
This diff is collapsed.
{"data":{}}
{"data":{}}
{"data":{"code":1,"msg":"操作成功","result":[{"businessStatus":"NIL","businessStatusCode":0,"businessType":"NIL","businessTypeCode":0,"vehicleId":1694264612474306561,"vehiclePlate":"苏EAVP001"},{"businessStatus":"NIL","businessStatusCode":0,"businessType":"NIL","businessTypeCode":0,"vehicleId":1826545465602543618,"vehiclePlate":"皖BDJ1106"}],"success":true}}
This diff is collapsed.
This diff is collapsed.
{"vehicleStatistics":{"total":0,"minibus":0,"bus":0,"sweeper":0,"selling":1,"taxi":0,"brt":0,"patrol":0},"vehicleStatusList":[{"id":"267","type":"selling","status":0,"driveMode":1}]}
{"vehicleStatistics":{"total":0,"minibus":0,"bus":0,"sweeper":0,"selling":1,"taxi":0,"brt":0,"patrol":0},"vehicleStatusList":[{"id":"265","type":"selling","status":0,"driveMode":1}]}
{"vehicleStatistics":{"total":0,"minibus":0,"bus":0,"sweeper":0,"selling":1,"taxi":0,"brt":0,"patrol":0},"vehicleStatusList":[{"id":"263","type":"selling","status":0,"driveMode":1}]}
{"vehicleStatistics":{"total":0,"minibus":0,"bus":0,"sweeper":0,"selling":3,"taxi":0,"brt":0,"patrol":0},"vehicleStatusList":[{"id":"263","type":"selling","status":0,"driveMode":1},{"id":"265","type":"selling","status":0,"driveMode":1},{"id":"267","type":"selling","status":0,"driveMode":1}]}
{"vehicleStatistics":{"total":0,"minibus":0,"bus":0,"sweeper":0,"selling":1,"taxi":0,"brt":0,"patrol":0},"vehicleStatusList":[{"id":"257","type":"selling","status":1,"driveMode":1}]}
{"vehicleStatistics":{"total":0,"minibus":0,"bus":0,"sweeper":0,"selling":0,"taxi":0,"brt":0,"patrol":1},"vehicleStatusList":[{"id":"259","type":"patrol","status":1,"driveMode":1}]}
{"vehicleStatistics":{"total":0,"minibus":0,"bus":0,"sweeper":0,"selling":1,"taxi":0,"brt":0,"patrol":1},"vehicleStatusList":[{"id":"257","type":"selling","status":1,"driveMode":1},{"id":"259","type":"patrol","status":1,"driveMode":1}]}
This diff is collapsed.
[[125.13732331853795,43.836503807842064,2.1238200664520264,148.4593963623047],[125.13732456106733,43.83650234266057,2.1197010377305237,148.46122591367404],[125.1373259356782,43.836500721412406,2.1058173518285455,148.47023731725585],[125.1373271622247,43.83649927405063,2.0854163469578193,148.48763911477886],[125.13732850750527,43.836497685065595,2.0545205324242746,148.51908759613238],[125.13732982880497,43.83649612236514,2.015545349000081,148.552166675355],[125.13733112114255,43.83649459198604,1.9690383860750174,148.58376310334413],[125.13733237991389,43.836493099524986,1.9155906759919896,148.61487009617596],[125.13733372075089,43.83649150773015,1.8494878892184576,148.64892224504783],[125.13733501076648,43.83648997422776,1.7764887708149326,148.68287417429354],[125.13733624538061,43.83648850453908,1.6973816258109495,148.72038673474182],[125.13733762751319,43.836486856463566,1.597100930027932,148.76870231319646],[125.13733882479282,43.83648542615089,1.4990685641484547,148.81438364452077],[125.13734012165186,43.836483873905195,1.3794630711024702,148.86563499372005],[125.13734146722936,43.83648226004303,1.2378511377214343,148.91794334067754],[125.13734273362928,43.83648073812853,1.084230458962878,148.96614073396194],[125.1373440067006,43.83647920537114,0.9031891918246945,149.0106390975726],[125.13734527420314,43.83647767686824,0.6832684304725716,149.04650401421077],[125.13734655776086,43.83647612718491,0.38209293526429194,149.0690508870936],[125.13734737296731,43.83647514245712,4.464678881147032E-5,149.07354499750062],[125.1373473729682,43.836475142456045,0.0,149.07354499750062],[125.13734865114003,43.83647359839668,0.0,149.07354499750062],[125.13734992931177,43.836472054337314,0.0,149.07354499750062],[125.13735120748345,43.83647051027791,0.0,149.07354499750062],[125.13735248565507,43.836468966218504,0.0,149.07354499750062],[125.13735376382661,43.83646742215908,0.0,149.07354499750062],[125.1373550419981,43.83646587809965,0.0,149.07354499750062],[125.13735632016953,43.8364643340402,0.0,149.07354499750062],[125.1373575983409,43.83646278998074,0.0,149.07354499750062],[125.13735887651215,43.836461245921264,0.0,149.07354499750062],[125.13736015468339,43.83645970186176,0.0,149.07354499750062],[125.13736143285453,43.83645815780225,0.0,149.07354499750062],[125.13736271102565,43.836456613742726,0.0,149.07354499750062],[125.13736398919666,43.83645506968319,0.0,149.07354499750062],[125.13736526736761,43.83645352562363,0.0,149.07354499750062],[125.1373665455385,43.83645198156407,0.0,149.07354499750062],[125.13736782370934,43.83645043750448,0.0,149.07354499750062],[125.1373691018801,43.83644889344488,0.0,149.07354499750062],[125.1373703800508,43.836447349385274,0.0,149.07354499750062],[125.13737165822143,43.836445805325646,0.0,149.07354499750062],[125.13737293639198,43.836444261266,0.0,149.07354499750062],[125.13737421456248,43.83644271720636,0.0,149.07354499750062],[125.13737549273291,43.836441173146675,0.0,149.07354499750062],[125.13737677090329,43.836439629086996,0.0,149.07354499750062],[125.13737804907359,43.83643808502728,0.0,149.07354499750062]]
\ No newline at end of file
package com.sd.cavphmi.bean
/**
* Avp 状态信息
* {"code":1,"msg":"操作成功","result":[{"vehicleId":1694264612474306561,"vehiclePlate":"苏EAVP001","businessType":"NIL","businessTypeCode":0,"businessStatus":"NIL","businessStatusCode":0,"lines":null},{"vehicleId":1826545465602543618,"vehiclePlate":"皖BDJ1106","businessType":"NIL","businessTypeCode":0,"businessStatus":"NIL","businessStatusCode":0,"lines":null}],"success":true}
*/
data class AvpStatuBean(
val code: Int,
val msg: String,
val result: List<AResult>,
val success: Boolean
)
data class AResult(
val businessStatus: String,
val businessStatusCode: Int,
val businessType: String,
val businessTypeCode: Int,
val lines: Any,
val vehicleId: Long,
val vehiclePlate: String
)
\ No newline at end of file
package com.sd.cavphmi.bean
/**感知目标物
*
*
* ***/
/**
* 感知目标物
****/
data class PerTarget(
val collectTime: Int,
val deviceId: String,
val id: String,
val message: Message,
val msgId: Any,
val msgType: String,
val receiveTime: Long,
val reportTime: Long
)
class PerTarget(
val id: String,
val type: Int,
val typeName: String,
val levlel: Int,
val startTime: Long,
val reportTime: Long,
val typeList:ArrayList<PerTargetTypeItem>
data class Message(
val participants: List<Participant>
)
data class PerTargetTypeItem(
val id: String,
val name: String,
val longitude: Float,
val latitude: Float,
val startTime: Long,
val elevation: Int
data class Participant(
val elevation: Any,
val heading: Double,
val latitude: Double,
val longitude: Double,
val ptcId: String,
val ptcType: String,
val speed: Double,
val vehicleColor: String,
val vehiclePlate: String,
val vehiclePlateColor: Any,
val vehicleType: String
)
\ No newline at end of file
package com.sd.cavphmi.bean
/**
* 车位占用情况
* {"code":1,"msg":"操作成功","result":[{"id":307,"code":"B007","locationName":"B007","distance":null,"longitude":null,"latitude":null,"surface":"[[116.49722581116599,39.73156217155182],[116.497239837239803,39.731542530956666],[116.497186225555666,39.731520254990194],[116.497172199475997,39.73153989558011],[116.49722581116599,39.73156217155182]]","state":"FREE","placeId":3}]}
*/
data class SpaceInfoBean(
val code: Int,
val msg: String,
val result: List<Result>
)
data class Result(
val code: String,
val distance: Any,
val id: Int,
val latitude: Any,
val locationName: String,
val longitude: Any,
val placeId: Int,
val state: String,
val surface: String
)
\ No newline at end of file
package com.sd.cavphmi.bean
/***联网车辆状态数据
* {"vehicleStats":{"total":0,"avp":0},"vehicleStatusList":[],"wsTime":1750138623719}
* {"vehicleStats":{"total":1,"avp":1},"vehicleStatusList":[],"wsTime":1750301590009}
/**
*
* 联网车辆状态数据 (只有发生变化的数据才推送)
* {"vehicleStatistics":{"total":0,"minibus":0,"bus":0,"sweeper":0,"selling":3,"taxi":0,"brt":0,"patrol":0},"vehicleStatusList":[{"id":"263","type":"selling","status":0,"driveMode":1},{"id":"265","type":"selling","status":0,"driveMode":1},{"id":"267","type":"selling","status":0,"driveMode":1}]}
* **/
data class VehicleStats(
val vehicleStats: VehicleStatsX,
val vehicleStatusList: List<VehicleStatusList>,
val wsTime: Long
data class VehicleStats(
val vehicleStatistics: VehicleStatistics,
val vehicleStatusList: List<VehicleStatus>
)
data class VehicleStatsX(
val avp: Int,
val total: Int
data class VehicleStatistics(
val brt: Int,
val bus: Int,
val minibus: Int, //小巴车在线数量
val patrol: Int,
val selling: Int,
val sweeper: Int,
val taxi: Int,
val total: Int//总的在线数量
)
data class VehicleStatusList(var driveMode:Int)
\ No newline at end of file
// 状态变化的车辆,对象型数组
data class VehicleStatus(
val driveMode: Int,
val id: String,
val status: Int, // 必填,int 类型,车辆状态编码:0-离线、1-在线
val type: String // 选填,字符串类型,车辆类型
)
\ No newline at end of file
package com.sd.cavphmi.net.httpmothod
import com.sd.cavphmi.bean.AvpStatuBean
import com.sd.cavphmi.bean.LoginSuccBean
import com.sd.cavphmi.bean.ParkLinePlan
import com.sd.cavphmi.bean.SpaceInfoBean
import com.sd.cavphmi.bean.SpaceNoBean
import com.sd.cavphmi.bean.VehDetailBean
import com.sd.cavphmi.net.MyBaseResource
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
interface ClientRetrofitMethod {
......@@ -17,15 +20,24 @@ interface ClientRetrofitMethod {
// @GET("http://59.175.163.12/serv-addr/server.json")
// fun getConfigurations(): Observable<List<ConfigurationBean>>
//
/***车辆详情***/
// @POST("api/perm/admin/auth/passLogin")
// @POST("api/perm/admin/auth/passLogin")
/**登录***/
@POST("api/opr/login")
suspend fun login(@Body body: RequestBody): LoginSuccBean
/***车辆详情***/
/**车辆详情***/
// @POST("v1/avp/overview/getVehicleInfo")
@POST("api/avpweb/v1/avp/overview/getVehicleInfo")
suspend fun getVehDetail(@Body body: RequestBody): VehDetailBean
/**车位占用情况***/
@POST("api/avpweb/v1/avp/overview/listSpaceInfoByCondition")
suspend fun getSpaceInfo(@Body body: RequestBody): SpaceInfoBean
/**车位占用情况***/
@POST("api/avpweb/v1/avp/overview/listAvpStatus")
suspend fun getAvpStatus(@Body body: RequestBody): AvpStatuBean
// /***车辆详情***/
// @POST("/v1/avp/overview/listAvpStatus")
// suspend fun getVehDetail(@Body body: RequestBody): VehDetailBean
......
package com.sd.cavphmi.repositorys
import com.sd.cavphmi.bean.AvpStatuBean
import com.sd.cavphmi.bean.SpaceInfoBean
import com.sd.cavphmi.bean.VehDetailBean
import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.net.RequestBodyUtil
......@@ -8,19 +10,16 @@ import com.sd.cavphmi.utils.MyContants
import retrofit2.HttpException
import javax.inject.Inject
/***AVP 接口**/
/**AVP 接口**/
class AvpDataRepo @Inject constructor(private var clientRetrofitMethod: ClientRetrofitMethod) {
/***获取车辆详情
/**获取车辆详情
* @param id 正常应该是传场地ID,但是亦庄这个和太和桥车是一样的
* **/
suspend fun getVehDetail(id: String=""): MyResult<VehDetailBean> {
if (id.isNullOrEmpty()) {
return MyResult.Error(MyContants.HTTP_ERROR, "error")
}
// if (!orderCalled.getAndSet(true)) {
var map = mapOf("id" to id)
var body = RequestBodyUtil.toRequestBody(map)
*/
suspend fun getVehDetail(id: String = ""): MyResult<VehDetailBean> {
// var map = mapOf("id" to id)
// var map = mapOf()
var body = RequestBodyUtil.toRequestBody(mapOf())
try {
var bean = clientRetrofitMethod.getVehDetail(body)
return MyResult.Success(bean)
......@@ -30,13 +29,41 @@ class AvpDataRepo @Inject constructor(private var clientRetrofitMethod: ClientRe
} catch (e: Exception) {
return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
}
// } else {
// return MyResult.Error(MyContants.ALREADT_ONCE, "")
// }
}
/**
* 获取车位占用情况
*/
suspend fun getSpaceInfo(): MyResult<SpaceInfoBean> {
try {
var body = RequestBodyUtil.toRequestBody(mapOf())
var bean = clientRetrofitMethod.getSpaceInfo(body)
return MyResult.Success(bean)
} catch (e: HttpException) {
// println("e.message = ${e.message}")
return MyResult.Error(e.code(), e.message() ?: "error")
} catch (e: Exception) {
return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
}
}
/**
* 获取AVP状态信息
*/
suspend fun getAvpStatus(): MyResult<AvpStatuBean> {
try {
var body = RequestBodyUtil.toRequestBody(mapOf())
var bean = clientRetrofitMethod.getAvpStatus(body)
return MyResult.Success(bean)
} catch (e: HttpException) {
// println("e.message = ${e.message}")
return MyResult.Error(e.code(), e.message() ?: "error")
} catch (e: Exception) {
return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
}
}
suspend fun login(user: String, pwd: String,verifyCode: Int): MyResult<String> {
suspend fun login(user: String, pwd: String, verifyCode: Int): MyResult<String> {
// if (id.isNullOrEmpty()) {
// return MyResult.Error(MyContants.HTTP_ERROR, "error")
// }
......
......@@ -3,10 +3,6 @@ package com.sd.cavphmi.ui
import android.Manifest
import android.content.Intent
import androidx.lifecycle.ViewModelProvider
import com.minedata.minenavi.SDKInitializer
import com.minedata.minenavi.SDKInitializer.InitListener
import com.minedata.minenavi.mapdal.CoordType
import com.minedata.minenavi.poiquery.SearchUrlType
import com.permissionx.guolindev.PermissionX
import com.sd.cavphmi.BR
import com.sd.cavphmi.R
......@@ -25,7 +21,6 @@ class BootActivity : BaseActivity<ActivityBootBinding, MyBaseViewModel>() {
return -1
}
override fun initContentView(): Int {
return R.layout.activity_boot
}
......@@ -44,7 +39,6 @@ class BootActivity : BaseActivity<ActivityBootBinding, MyBaseViewModel>() {
// tcpUpVM.owner=this
// tcpUpVM.upWork()
// viewModel.testWork()
initMap()
requestPers()
}
......@@ -65,29 +59,6 @@ class BootActivity : BaseActivity<ActivityBootBinding, MyBaseViewModel>() {
}, 10)
}
fun initMap() {
// 隐私合规接口
SDKInitializer.setAgreePrivacy(true)
// if (SDKInitializer.getServerHost().equals("mineservice.minedata.cn")) {
// SDKInitializer.setStyleUrl(
// MineMap.UrlType.basicMap,
// "https://service.minedata.cn/map/solu/style/1359221494104252416"
// )
// }
// 设置地图坐标系
SDKInitializer.setCoordType(CoordType.GCJ02)
SDKInitializer.setSearchUrlType(SearchUrlType.v1)
SDKInitializer.initialize(this, object : InitListener {
override fun onInitSuccess() {
println("---Map onInitSuccess map")
}
override fun onInitFailed(msg: String?) {
println("---Map onInitFailed msg = ${msg}")
}
})
}
fun requestPers() {
var list = listOf(
......@@ -99,7 +70,12 @@ class BootActivity : BaseActivity<ActivityBootBinding, MyBaseViewModel>() {
PermissionX.init(this)
.permissions(list)
.onExplainRequestReason { scope, deniedList ->
scope.showRequestReasonDialog(deniedList, "Adas 需要同意以下授权才能正常使用", "好的", "取消")
scope.showRequestReasonDialog(
deniedList,
"Adas 需要同意以下授权才能正常使用",
"好的",
"取消"
)
}
// .onForwardToSettings { scope, deniedList ->
// scope.showForwardToSettingsDialog(deniedList, "您需要手动在‘设置’中允许必要的权限", "OK", "Cancel")
......@@ -112,7 +88,7 @@ class BootActivity : BaseActivity<ActivityBootBinding, MyBaseViewModel>() {
ToastHelper.showShort(this, "权限被拒")
binding.root.postDelayed({
finish()
},500)
}, 500)
}
}
......
......@@ -38,18 +38,22 @@ class LoginActivity : AppCompatActivity() {
var pp = SM4CryptoHelper.encryptECB(key, pwd.toByteArray())
loginVm.login(user, pp, 276135).observe(this) {
// startActivity(Intent(this,MainActivity::class.java))
}
}
loginVm.loginData.observe(this){
startActivity(Intent(this,MainActivity::class.java))
}
// HTTP获取车辆详情
binding.btVehinfo.setOnClickListener {
mainVm.getVehDetail()
}
// HTTP获取车位占用情况
binding.btSpaceinfo.setOnClickListener {
mainVm.getSpaceInfo()
}
// HTTP获取AVp状态信息 以后就用socket订阅了
binding.btAvpstatu.setOnClickListener {
mainVm.getAvpStatus()
}
//直接到首页
binding.btMain.setOnClickListener {
startActivity(Intent(this, MainActivity::class.java))
......
package com.sd.cavphmi.ui.fragment
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.fragment.app.Fragment
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 {
// region Lifecycle Management - MUST BE FORWARDED TO UnityPlayer
override fun onResume() {
super.onResume()
mUnityPlayer.onResume()
}
override fun onStart() {
super.onStart()
mUnityPlayer.onStart()
}
override fun onPause() {
super.onPause()
mUnityPlayer.onPause()
}
override fun onStop() {
super.onStop()
mUnityPlayer.onStop()
}
override fun onDestroy() {
super.onDestroy()
this.mUnityPlayer.destroy()
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// 创建一个简单的 FrameLayout 作为 Fragment 的根视图
val frameLayout = FrameLayout(requireContext())
frameLayout.layoutParams = ViewGroup.LayoutParams(-1, -1)
// // 将 UnityPlayer 的视图添加到 FrameLayout 中
mUnityPlayer.let { unityPlayer ->
// val playerView = unityPlayer
val layoutParams = ViewGroup.LayoutParams(-1, -1)
frameLayout.addView(unityPlayer, layoutParams)
}
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 实例
private lateinit var mUnityPlayer: UnityPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mUnityPlayer = UnityPlayer(requireContext(),this)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 视图创建完成后,可以在这里进行最终设置
mUnityPlayer.windowFocusChanged(true)
// mUnityPlayer.requestFocus()
}
// 可选:向 Unity 发送消息的方法
fun sendMessageToUnity(gameObjectName: String, methodName: String, message: String) {
// mUnityPlayer?.sendMessage(gameObjectName, methodName, message)
// UnityPlayer.UnitySendMessage()
}
companion object {
@JvmStatic
fun newInstance() = UnityFragment()
}
}
\ No newline at end of file
......@@ -32,7 +32,7 @@ import kotlinx.coroutines.launch
//private const val ARG_PARAM2 = "param2"
/**
* 预警
* 预警气泡
*/
@AndroidEntryPoint
class WarnFragment : BaseFragment<FragmentWarnBinding, MyBaseViewModel>() {
......
......@@ -5,8 +5,8 @@ import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.text.style.RelativeSizeSpan
import androidx.core.text.set
import com.minedata.minenavi.addons.DistanceBean
import com.minedata.minenavi.util.MineNaviUtil
//import com.minedata.minenavi.addons.DistanceBean
//import com.minedata.minenavi.util.MineNaviUtil
import java.text.ParseException
import java.text.SimpleDateFormat
import java.time.LocalTime
......@@ -54,7 +54,7 @@ object DateUtils {
* @param speed 米/秒
* @param dis 米
**/
fun getExpectedTime(speed: Int, dis: Int): String {
/* fun getExpectedTime(speed: Int, dis: Int): String {
if (speed == 0 || dis == 0)
return "剩余0分"
var mUtils = Utils()
......@@ -79,9 +79,9 @@ object DateUtils {
stringBuilder.append("预计").append(s_arriveTime).append("到达")
}
return stringBuilder.toString()
}
}*/
fun getExpectedTime(speed: Int, distanceBean: DistanceBean): String {
/* fun getExpectedTime(speed: Int, distanceBean: DistanceBean): String {
if (speed == 0 || distanceBean.distanceValue.toFloat() == 0f)
return "剩余0.0分"
var dis = 0//单位米
......@@ -110,7 +110,7 @@ object DateUtils {
stringBuilder.append("预计").append(s_arriveTime).append("到达")
}
return stringBuilder.toString()
}
}*/
/**
......
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