126 lines
3.8 KiB
Kotlin
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
|
|
}
|
|
|
|
} |