package com.xianning.driver.base.gaode
|
|
import android.content.Context
|
import android.location.LocationManager
|
import android.os.Bundle
|
import android.os.Handler
|
import android.os.Looper
|
import android.view.View
|
import androidx.core.content.ContextCompat
|
import com.baidu.location.BDAbstractLocationListener
|
import com.baidu.location.LocationClient
|
import com.baidu.location.LocationClientOption
|
import com.baidu.location.LocationClientOption.LocationMode
|
import com.baidu.mapapi.map.*
|
import com.baidu.mapapi.model.LatLng
|
import com.baidu.mapapi.model.LatLngBounds
|
import com.xianning.driver.R
|
import java.util.*
|
|
|
object AMapKit {
|
|
fun initLocation(context: Context, lisener: BDAbstractLocationListener):LocationClient? { //初始化定位
|
var mLocationClient:LocationClient? = null
|
try {
|
mLocationClient = LocationClient(context)
|
} catch (e: java.lang.Exception) {
|
e.printStackTrace()
|
}
|
val option = LocationClientOption()
|
option.locationMode = LocationMode.Hight_Accuracy
|
option.setScanSpan(5000)
|
//可选,设置发起定位请求的间隔,int类型,单位ms
|
//如果设置为0,则代表单次定位,即仅定位一次,默认为0
|
//如果设置非0,需设置1000ms以上才有效
|
option.setOpenGnss(true)
|
//可选,设置是否使用卫星定位,默认false
|
//使用高精度和仅用设备两种定位模式的,参数必须设置为true
|
option.setIgnoreKillProcess(true);
|
//可选,定位SDK内部是一个service,并放到了独立进程。
|
//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
|
option.SetIgnoreCacheException(false);
|
option.setIsNeedAddress(true)
|
//可选,设置是否收集Crash信息,默认收集,即参数为false
|
mLocationClient?.setLocOption(option)
|
mLocationClient?.registerLocationListener(lisener)
|
mLocationClient?.start()
|
|
return mLocationClient
|
}
|
|
fun initMap(savedInstanceState: Bundle?, mapView: MapView): BaiduMap {
|
val aMap = mapView.map
|
val uiSettings = aMap.uiSettings
|
uiSettings.isCompassEnabled = false
|
mapView.showScaleControl(false)
|
mapView.showZoomControls(false)
|
return aMap
|
}
|
|
fun drawLine(context: Context, aMap: BaiduMap, start: LatLng, end: LatLng): Overlay? {
|
val latLngs: MutableList<LatLng> = ArrayList()
|
latLngs.add(start)
|
latLngs.add(end)
|
//设置折线的属性
|
val mOverlayOptions: OverlayOptions = PolylineOptions()
|
.width(10)
|
.color(ContextCompat.getColor(context, R.color.main_yellow_qia))
|
.points(latLngs)
|
//在地图上绘制折线
|
//mPloyline 折线对象
|
return aMap.addOverlay(mOverlayOptions)
|
}
|
|
|
fun drawLineAndMove(context: Context, aMap: BaiduMap, start: LatLng, end: LatLng, padd: Int) {
|
drawLine(context, aMap, start, end)
|
moveCamera(aMap, start, end, padd)
|
}
|
|
|
fun drawLine(context: Context, aMap: BaiduMap, points: List<LatLng>?): Overlay {
|
val latLngs: MutableList<LatLng> = ArrayList()
|
latLngs.addAll(points?: arrayListOf())
|
//设置折线的属性
|
val mOverlayOptions: OverlayOptions = PolylineOptions()
|
.width(10)
|
.color(ContextCompat.getColor(context, R.color.qing))
|
.points(latLngs)
|
//在地图上绘制折线
|
//mPloyline 折线对象
|
return aMap.addOverlay(mOverlayOptions)
|
}
|
|
fun moveCamera(aMap: BaiduMap, latlng: LatLng) {
|
val mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latlng)
|
aMap.animateMapStatus(mapStatusUpdate,16)
|
}
|
|
fun moveCamera(aMap: BaiduMap, start: LatLng?, end: LatLng?) {
|
val bounds = LatLngBounds.Builder().include(start).include(end).build()
|
val mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(bounds,100,100,100,100)
|
aMap.animateMapStatus(mapStatusUpdate)
|
}
|
|
fun moveCamera3(aMap: BaiduMap, start: LatLng?, end: LatLng?, car: LatLng?) {
|
val bounds = LatLngBounds.Builder().include(start).include(end).include(car).build()
|
val mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(bounds,150,150,150,150)
|
aMap.animateMapStatus(mapStatusUpdate)
|
|
}
|
|
fun moveCamera(aMap: BaiduMap, start: LatLng, end: LatLng, padd: Int) {
|
val bounds = LatLngBounds.Builder().include(start).include(end).build()
|
val mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(bounds,padd,padd,padd,padd)
|
aMap.animateMapStatus(mapStatusUpdate)
|
}
|
|
fun getOption(
|
latLng: LatLng,
|
view: View
|
): MarkerOptions {
|
return MarkerOptions().anchor(0.5f, 1f)
|
.position(latLng)
|
.icon(BitmapDescriptorFactory.fromBitmap(BaseMapActivity.convertViewToBitmap(view)))
|
.draggable(true).flat(true)
|
}
|
|
/***
|
* 修改marker的view
|
*/
|
fun getIcon(view: View): BitmapDescriptor {
|
return BitmapDescriptorFactory.fromBitmap(BaseMapActivity.convertViewToBitmap(view))
|
}
|
|
/**
|
* 添加marker点
|
*/
|
fun addMarker(
|
aMap: BaiduMap,
|
mLat: Double?,
|
mLng: Double?,
|
view: View,
|
peopleId: String
|
): Overlay? {
|
if (mLat == null || mLng == null){
|
return null
|
}
|
val options: MarkerOptions = getOption(LatLng(mLat, mLng), view)
|
val marker: Overlay = aMap.addOverlay(options)
|
return marker
|
}
|
|
fun getTance(tance: Float): String {
|
if (tance == 0f) {
|
return "0米"
|
}
|
return if (tance > 1000) {
|
String.format("%.1f公里", (tance / 1000f))
|
} else {
|
String.format("%.1f米", tance)
|
}
|
}
|
|
|
|
fun getTimeType(num: Int): String {
|
if (num in 0..60) {
|
return num.toString() + "s"
|
}
|
if (num in 60..60 * 60) {
|
return (num / 60).toString() + ":" + (num % 60).toString() + "s"
|
}
|
if (num in 60..60 * 60 * 24) {
|
return (num / 3600).toString() + ":" + ((num % 3600) / 60).toString() + ":" + (((num % 3600) % 60) % 60).toString() + "s"
|
}
|
return ""
|
}
|
|
/***
|
* 是否开启gps
|
*/
|
fun isLocServiceEnable(context: Context): Boolean {
|
val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
var gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|
var network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
|
if (gps || network) {
|
return true
|
}
|
return false
|
}
|
}
|