Files
MoGoEagleEye/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt
2023-08-11 14:51:19 +08:00

126 lines
3.8 KiB
Kotlin

package com.mogo.map
import android.util.Pair
import com.mogo.eagle.core.data.map.CenterLine
import com.mogo.map.utils.ObjectUtils
import com.zhidaoauto.map.sdk.open.abs.IResult
import com.zhidaoauto.map.sdk.open.data.MapDataApi
import com.zhidaoauto.map.sdk.open.query.LonLatPoint
import com.zhidaoauto.map.sdk.open.road.RoadRectInfos
import com.zhidaoauto.map.sdk.open.routeinfo.RoadInfo
/**
* 地图数据工具
*/
object MapDataWrapper {
/**
* 获取车道中心线数据
* @param lon 经度
* @param lat 纬度
* @param angle 角度
* @param call 回调
*/
fun getCenterLineInfo(lon: Double, lat: Double, angle: Float,call:IResult<CenterLine>){
MapDataApi.getCenterLineInfo(
lon,
lat,
angle,
object : IResult<com.zhidaoauto.map.sdk.open.road.CenterLine> {
override fun result(
code: Int,
result: com.zhidaoauto.map.sdk.open.road.CenterLine?
) {
call.result(0,ObjectUtils.transformCenterLine(result))
}
})
}
/**
* 获取车道限速
* @param lon 经度
* @param lat 纬度
* @param angle 角度
* @param call 回调
*/
fun getLimitSpeed(lon: Double, lat: Double, angle: Float,call : IResult<Int>) {
MapDataApi.getLimitSpeed(lon, lat, angle, object : IResult<RoadInfo> {
override fun result(code: Int, result: RoadInfo?) {
call.result(code,result?.speed?:0)
}
})
}
/**
* 获取道路角度
* @param lon 经度
* @param lat 纬度
* @param angle 角度
* @param call 回调
*/
fun getRoadAngle(lon: Double, lat: Double, angle: Float,call : IResult<Double>) {
MapDataApi.getRoadRectInfo(lon, lat, angle, object : IResult<RoadRectInfos> {
override fun result(code: Int, result: RoadRectInfos?) {
call.result(code,result?.angle?:0.0)
}
})
}
/**
* 按距离获取道路数据
* @param lon 经度
* @param lat 纬度
* @param angle 角度
* @param call 回调
*/
fun getCenterLineRangeInfo(
lon: Double,
lat: Double,
angle: Float,
distance: Float,
call:IResult<com.mogo.map.center.CenterLine>
) {
try {
MapDataApi.getCenterLineRangeInfo(
lon,
lat,
angle,
distance,
object : IResult<com.zhidaoauto.map.sdk.open.road.CenterLine> {
override fun result(
code: Int,
info: com.zhidaoauto.map.sdk.open.road.CenterLine?
) {
var ret: com.mogo.map.center.CenterLine? = null
if (info != null) {
ret = com.mogo.map.center.CenterLine(
info.id,
info.tile_id,
info.road_id,
info.lane_id,
convert(info.points),
info.angle?:0.0
)
}
call.result(code,ret)
}
})
} catch (t: Throwable) {
t.printStackTrace()
}
}
private fun convert(points: List<LonLatPoint>?): List<Pair<Double, Double>> {
if (points == null || points.isEmpty()) {
return emptyList()
}
val ret: MutableList<Pair<Double, Double>> = ArrayList(points.size)
for (p in points) {
ret.add(Pair.create(p.longitude, p.latitude))
}
return ret
}
}