lmw
2025-04-14 0361f47762f9958f2ec91fdb62bfc98de4e162a6
app/src/main/java/com/xianning/driver/base/gaode/AMapKit.kt
@@ -7,10 +7,6 @@
import android.os.Looper
import android.view.View
import androidx.core.content.ContextCompat
import com.amap.api.services.core.LatLonPoint
import com.amap.api.services.route.*
import com.amap.api.services.route.RouteSearch.DriveRouteQuery
import com.amap.api.services.route.RouteSearch.FromAndTo
import com.baidu.location.BDAbstractLocationListener
import com.baidu.location.LocationClient
import com.baidu.location.LocationClientOption
@@ -45,11 +41,12 @@
        //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
        option.SetIgnoreCacheException(false);
        option.setIsNeedAddress(true)
        //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
        option.setCoorType("bd09ll")
        //可选,设置是否收集Crash信息,默认收集,即参数为false
        mLocationClient?.setLocOption(option)
        mLocationClient?.registerLocationListener(lisener)
        mLocationClient?.start()
        return mLocationClient
    }
@@ -83,7 +80,7 @@
    }
    fun drawLine(context: Context, aMap: BaiduMap, points: List<LatLng>?): Overlay {
    fun drawLine(context: Context, aMap: BaiduMap, points: List<LatLng>?): Overlay? {
        val latLngs: MutableList<LatLng> = ArrayList()
        latLngs.addAll(points?: arrayListOf())
        //设置折线的属性
@@ -93,12 +90,14 @@
            .points(latLngs)
        //在地图上绘制折线
        //mPloyline 折线对象
        return aMap.addOverlay(mOverlayOptions)
        if (aMap!=null)
            return aMap.addOverlay(mOverlayOptions)
        return null
    }
    fun moveCamera(aMap: BaiduMap, latlng: LatLng) {
        val mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latlng)
        aMap.animateMapStatus(mapStatusUpdate,16)
        aMap.animateMapStatus(mapStatusUpdate,8)
    }
    fun moveCamera(aMap: BaiduMap, start: LatLng?, end: LatLng?) {
@@ -179,79 +178,6 @@
            return (num / 3600).toString() + ":" + ((num % 3600) / 60).toString() + ":" + (((num % 3600) % 60) % 60).toString() + "s"
        }
        return ""
    }
    fun initRouteLine(
        context: Context,
        start: LatLng, end: LatLng,
        onClick: (latLngs: MutableList<LatLng>, lineTance: Float, lineTime: Long) -> Unit
    ) {
        initRouteLine(context, start, end, null, onClick)
    }
    fun initRouteLine(
        context: Context,
        start: LatLng, end: LatLng, centerPoint: List<LatLonPoint>?,
        onClick: (latLngs: MutableList<LatLng>, lineTance: Float, lineTime: Long) -> Unit
    ) {
        var routeSearch = RouteSearch(context)
        val fromAndTo = FromAndTo(
            LatLonPoint(start.latitude, start.longitude),
            LatLonPoint(end.latitude, end.longitude)
        )
        val query =
            DriveRouteQuery(
                fromAndTo,
                RouteSearch.DRIVING_SINGLE_SAVE_MONEY,
                centerPoint,
                null,
                ""
            )
        routeSearch.calculateDriveRouteAsyn(query)
        routeSearch.setRouteSearchListener(object : RouteSearch.OnRouteSearchListener {
            override fun onDriveRouteSearched(p0: DriveRouteResult?, p1: Int) {
                if (p1 == 1000) { //获取规划路线成功,获取到的是了,路线坐标点的集合
                    val paths: List<DrivePath> = p0!!.paths
                    var allDistance = 0f
                    if (paths.isNotEmpty()) {
                        val drivePath = paths[0]
                        //创建存储坐标点的集合
                        val latLngs: MutableList<LatLng> =
                            ArrayList()
                        //遍历获取规划的所有路线坐标点
                        for (mDriveStep in drivePath.steps) {
                            allDistance += mDriveStep.distance
                            for (mLatLonPoint in mDriveStep.polyline) {
                                latLngs.add(
                                    LatLng(
                                        mLatLonPoint.latitude,
                                        mLatLonPoint.longitude
                                    )
                                )
                            }
                        }
                        val lineTance = allDistance
                        val lineTime = (drivePath.duration / 60) //lineTime 分钟
                        Handler(Looper.getMainLooper()).post {
                            onClick(latLngs, lineTance, lineTime)
                        }
                    }
                }
            }
            override fun onBusRouteSearched(p0: BusRouteResult?, p1: Int) {
            }
            override fun onRideRouteSearched(p0: RideRouteResult?, p1: Int) {
            }
            override fun onWalkRouteSearched(p0: WalkRouteResult?, p1: Int) {
            }
        })
    }
    /***