| | |
| | | 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 |
| | |
| | | //设置是否在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 |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | 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()) |
| | | //设置折线的属性 |
| | |
| | | .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?) { |
| | |
| | | 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) { |
| | | } |
| | | |
| | | }) |
| | | } |
| | | |
| | | /*** |