diff --git a/libraries/mapmodule/build.gradle b/libraries/mapmodule/build.gradle index 3357d377e4..c6307d3d65 100644 --- a/libraries/mapmodule/build.gradle +++ b/libraries/mapmodule/build.gradle @@ -52,7 +52,7 @@ dependencies { implementation rootProject.ext.dependencies.androidxrecyclerview implementation rootProject.ext.dependencies.androidxannotation implementation rootProject.ext.dependencies.androidxappcompat - implementation rootProject.ext.dependencies.recyclerviewadapterhelper +// implementation rootProject.ext.dependencies.recyclerviewadapterhelper implementation rootProject.ext.dependencies.retrofit implementation rootProject.ext.dependencies.retrofitconvertergson @@ -65,7 +65,7 @@ dependencies { implementation 'com.zhidaoauto.map:net:1.0.1' - implementation 'com.zhidaoauto.machine:mapcore:3.0.0.4' + implementation 'com.zhidaoauto.machine:mapcore:3.0.0.5' } diff --git a/libraries/mapmodule/src/main/java/com/autonavi/nge/MapBox.java b/libraries/mapmodule/src/main/java/com/autonavi/nge/MapBox.java index 9217fee7f2..e6fea0edc2 100644 --- a/libraries/mapmodule/src/main/java/com/autonavi/nge/MapBox.java +++ b/libraries/mapmodule/src/main/java/com/autonavi/nge/MapBox.java @@ -1,6 +1,5 @@ package com.autonavi.nge; -import static com.amap.api.navi.AmapNaviPage.TAG; import android.util.Log; @@ -8,6 +7,7 @@ import com.zhidaoauto.map.sdk.inner.CompileConfig; import com.zhidaoauto.map.sdk.inner.road.RoadResultController; public class MapBox { + private static final String TAG = "MapBox"; static { System.loadLibrary("map"); } diff --git a/libraries/mapmodule/src/main/java/com/autonavi/nge/guidance/RouteBookAdapter.kt b/libraries/mapmodule/src/main/java/com/autonavi/nge/guidance/RouteBookAdapter.kt index 8bd3267734..9e22a0682f 100644 --- a/libraries/mapmodule/src/main/java/com/autonavi/nge/guidance/RouteBookAdapter.kt +++ b/libraries/mapmodule/src/main/java/com/autonavi/nge/guidance/RouteBookAdapter.kt @@ -1,58 +1,58 @@ -package com.autonavi.nge.guidance - -import android.util.Log -import android.view.View -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.TextView -import com.chad.library.adapter.base.BaseQuickAdapter -import com.chad.library.adapter.base.viewholder.BaseViewHolder -import com.zhidaoauto.map.sdk.R -import com.zhidaoauto.map.sdk.inner.CompileConfig -import java.text.DecimalFormat - -class RouteBookAdapter : BaseQuickAdapter(R.layout.routebook_child_item) { - - private val TAG = javaClass.simpleName - - - override fun getDefItemCount(): Int { - return super.getDefItemCount() - } - - override fun convert(helper: BaseViewHolder, item: RouteBookItem) { - if (CompileConfig.DEBUG) { - Log.i(TAG, "routebookop--helper.adapterPosition:${helper.adapterPosition}") - } - when (helper.adapterPosition) { - 0 -> { - helper.getView(R.id.routebook_child_item_info_ll).visibility = View.VISIBLE - helper.getView(R.id.imgView).setImageResource(NaviDirRes.getResID(501)) - helper.getView(R.id.orientation).text = "从${item.routeName?:"起点"}出发" - helper.getView(R.id.length).visibility = View.GONE - } - else -> { - helper.getView(R.id.orientation).text = item.routeName - helper.getView(R.id.imgView).setImageResource(NaviDirRes.getResID(item.turnID)) - if (item.routeName == "目的地") { - helper.getView(R.id.length).visibility = View.GONE - } else { - helper.getView(R.id.length).visibility = View.VISIBLE - val i = item.routelength - if (i > 1000) { - val df = DecimalFormat("#.0") - val string = df.format(i.toDouble() / 1000) - val strs = string.split(".") - if (strs.size >= 2 && strs[1] == "0") { - helper.getView(R.id.length).text = """继续前行${strs[0]}km${item.routeSpeech}""".trimIndent() - } else { - helper.getView(R.id.length).text = """继续前行${string}km${item.routeSpeech}""".trimIndent() - } - } else { - helper.getView(R.id.length).text = """继续前行${i}m${item.routeSpeech}""".trimIndent() - } - } - } - } - } -} \ No newline at end of file +//package com.autonavi.nge.guidance +// +//import android.util.Log +//import android.view.View +//import android.widget.ImageView +//import android.widget.LinearLayout +//import android.widget.TextView +//import com.chad.library.adapter.base.BaseQuickAdapter +//import com.chad.library.adapter.base.viewholder.BaseViewHolder +//import com.zhidaoauto.map.sdk.R +//import com.zhidaoauto.map.sdk.inner.CompileConfig +//import java.text.DecimalFormat +// +//class RouteBookAdapter : BaseQuickAdapter(R.layout.routebook_child_item) { +// +// private val TAG = javaClass.simpleName +// +// +// override fun getDefItemCount(): Int { +// return super.getDefItemCount() +// } +// +// override fun convert(helper: BaseViewHolder, item: RouteBookItem) { +// if (CompileConfig.DEBUG) { +// Log.i(TAG, "routebookop--helper.adapterPosition:${helper.adapterPosition}") +// } +// when (helper.adapterPosition) { +// 0 -> { +// helper.getView(R.id.routebook_child_item_info_ll).visibility = View.VISIBLE +// helper.getView(R.id.imgView).setImageResource(NaviDirRes.getResID(501)) +// helper.getView(R.id.orientation).text = "从${item.routeName?:"起点"}出发" +// helper.getView(R.id.length).visibility = View.GONE +// } +// else -> { +// helper.getView(R.id.orientation).text = item.routeName +// helper.getView(R.id.imgView).setImageResource(NaviDirRes.getResID(item.turnID)) +// if (item.routeName == "目的地") { +// helper.getView(R.id.length).visibility = View.GONE +// } else { +// helper.getView(R.id.length).visibility = View.VISIBLE +// val i = item.routelength +// if (i > 1000) { +// val df = DecimalFormat("#.0") +// val string = df.format(i.toDouble() / 1000) +// val strs = string.split(".") +// if (strs.size >= 2 && strs[1] == "0") { +// helper.getView(R.id.length).text = """继续前行${strs[0]}km${item.routeSpeech}""".trimIndent() +// } else { +// helper.getView(R.id.length).text = """继续前行${string}km${item.routeSpeech}""".trimIndent() +// } +// } else { +// helper.getView(R.id.length).text = """继续前行${i}m${item.routeSpeech}""".trimIndent() +// } +// } +// } +// } +// } +//} \ No newline at end of file diff --git a/libraries/mapmodule/src/main/java/com/autonavi/nge/map/MapView.kt b/libraries/mapmodule/src/main/java/com/autonavi/nge/map/MapView.kt index 754d49cd0c..0e14a7427b 100644 --- a/libraries/mapmodule/src/main/java/com/autonavi/nge/map/MapView.kt +++ b/libraries/mapmodule/src/main/java/com/autonavi/nge/map/MapView.kt @@ -113,8 +113,8 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr // 地图POI是否允许点击。 private var mPoiTouchEnable = true - private var viewWidth = 1920 - private var viewHeight = 1040 + private var mViewWidth = 1920 + private var mViewHeight = 1040 var mLonLat: LonLat? = null private val ZOOM_CHANGE = 0x7F private val FOCUS_CHANGE = 0x9F @@ -123,6 +123,7 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr private val RENDER_COMPLETE = 0x15F private val LOAD_COMPLETE = 0x17F private val RENDER_CHANGE = 0x19F + private val INIT_COMPLETE = 0x21F private val LISTENER_TYPE_SCREEN = 0x5F private val DELAY_TIME: Long = 500 private val VELOCITY_MEASURE: Float = 3000f @@ -183,6 +184,13 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr // CommonController.instance.naviAutoView?.mNaviViewListener?.onNaviViewLoaded() } + + INIT_COMPLETE -> { + if (DEBUG) { + Log.i(TAG, "mapop--init complete-start") + } + mEventController?.dispatchMapLoadedInitListener() + } else -> { } } @@ -628,7 +636,7 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr if(mMapStyleParams.getStyleMode() == MapAutoApi.MAP_STYLE_NIGHT_VR || mMapStyleParams.getStyleMode() == MapAutoApi.MAP_STYLE_DAY_VR) { mMapController?.setMapViewVisualAngle(mMapStyleParams.getDefaultPerspective()) } - mEventController?.dispatchMapLoadedInitListener() + mHandler.sendEmptyMessage(INIT_COMPLETE) if(DEBUG){ Log.i(TAG, "mapop-surfaceop--onDrawFrame:threadop:${Thread.currentThread().id}") } @@ -658,14 +666,14 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr if (DEBUG) { Log.i(TAG, "mapop--surfaceop--resize:${width},${height}") } - if (width == 0 || height == 0 || (viewWidth == width && viewHeight == height)) { + if (width == 0 || height == 0 || (mViewWidth == width && mViewHeight == height)) { return } // gl.glViewport(0, 0, width, height) - viewWidth = width - viewHeight = height - MapTools.viewHeight = viewWidth - MapTools.viewWidth = viewHeight + mViewWidth = width + mViewHeight = height + MapTools.viewHeight = mViewWidth + MapTools.viewWidth = mViewHeight if (DEBUG) { Log.i(TAG, "mapop--surfaceop--resize:${width},${height}") } @@ -1129,6 +1137,14 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr return isTouchingFlag } + override fun getViewWidth(): Int{ + return mViewWidth + } + + override fun getViewHeight(): Int{ + return mViewHeight + } + override fun isCanZoom(): Boolean { return isCanZoom } @@ -1232,10 +1248,6 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr mStylePath = path } - override fun resizeP(w: Int, h: Int) { - mMapEngine.resize(w, h) - } - override fun renderP() { mMapEngine.render() } @@ -1324,7 +1336,6 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr init { System.loadLibrary("map") - System.loadLibrary("common") } init { diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/abs/IMapView.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/abs/IMapView.kt index 43d13fa359..06027db657 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/abs/IMapView.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/abs/IMapView.kt @@ -18,8 +18,8 @@ interface IMapView { fun isSurfaceCreated(): Boolean fun isLoaded(): Boolean fun isTouching(): Boolean - fun getWidth(): Int - fun getHeight(): Int + fun getViewWidth(): Int + fun getViewHeight(): Int fun getTilt(): Float @@ -27,8 +27,6 @@ interface IMapView { fun unloadP() - fun resizeP(w: Int, h: Int) - fun renderP() // fun renderLocationP(lon: Float, lat: Float, providerType: Int): Int diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/marker/MarkerNativeInterface.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/marker/MarkerNativeInterface.kt index 0086af4949..6bfe58ff67 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/marker/MarkerNativeInterface.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/marker/MarkerNativeInterface.kt @@ -29,7 +29,7 @@ class MarkerNativeInterface(private val mMapController: IMapController): IMarker private val infoWindowClickListenerMap: MutableMap = HashMap() private val animationListenerMap: MutableMap = HashMap() private val markDragListenerMap: MutableMap = HashMap() - private val markerIconCacheMap = HashMap() + private val markerIconCacheMap = ConcurrentHashMap() private val markerInfoCacheMap = ConcurrentHashMap() //点击infoview区域 @@ -329,12 +329,20 @@ class MarkerNativeInterface(private val mMapController: IMapController): IMarker fun getRoateAngle(id: String?): Float { val rotateAngle = getMarkerProperty(id!!, "rotateAngle") - return java.lang.Float.valueOf(rotateAngle) + return if (TextUtils.isEmpty(rotateAngle)) { + 0f + } else { + rotateAngle.toFloat() + } } fun getDraggable(id: String?): Boolean { val draggable = getMarkerProperty(id!!, "draggable") - return draggable!!.toBoolean() + return if (TextUtils.isEmpty(draggable)) { + false + } else { + draggable.toBoolean() + } } fun setPeriod(id: String?, period: Int) { @@ -343,7 +351,11 @@ class MarkerNativeInterface(private val mMapController: IMapController): IMarker fun getPeriod(id: String?): Int { val period = getMarkerProperty(id!!, "period") - return period!!.toInt() + return if (TextUtils.isEmpty(period)) { + 0 + } else { + period.toInt() + } } fun showInfoWindow(id: String?) { diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/provider/MapDataProvider.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/provider/MapDataProvider.kt index 469abdae94..4c7f337640 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/provider/MapDataProvider.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/provider/MapDataProvider.kt @@ -26,7 +26,7 @@ class MapDataProvider : ContentProvider() { if (CompileConfig.DEBUG) { Log.i(TAG, "queryop MapDataProvider onCreate") } - mMatcher.addURI(context.packageName+ConstantExt.AUTHORITY, ConstantExt.STR_QUERY, ConstantExt.CODE_QUERY) + mMatcher.addURI(context?.packageName+ConstantExt.AUTHORITY, ConstantExt.STR_QUERY, ConstantExt.CODE_QUERY) return true } diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/Constant.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/Constant.kt index 658050da52..ca08fcf520 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/Constant.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/Constant.kt @@ -25,7 +25,6 @@ import android.widget.TextView import android.widget.Toast import androidx.recyclerview.widget.RecyclerView import com.autonavi.nge.guidance.RouteBook -import com.autonavi.nge.guidance.RouteBookAdapter import com.autonavi.nge.obj.SubCategory import com.autonavi.nge.routing.RoutingProvider import com.zhidaoauto.map.sdk.R @@ -288,7 +287,7 @@ object Constant { Environment.MEDIA_MOUNTED ) { mbExternalStorage = true - res = context.externalCacheDir.absolutePath +"/map/" + res = context.externalCacheDir?.absolutePath +"/map/" // res = (Environment.getExternalStorageDirectory().absolutePath // + "/Android/data/" + context.packageName+"/map/") } else { @@ -415,54 +414,6 @@ object Constant { return viewDialog } - @JvmStatic - fun getRouteBookDialog(act: Activity): Dialog { - val dialog = Dialog(act, R.style.Dialog_Fullscreen) - var routebook: RouteBook? = null - try { -// routebook = CommonController.instance.iNavigationCore?.Guidance_RouteBook(0, 0, 4) - } catch (e: RemoteException) { - e.printStackTrace() - } - val adapter = RouteBookAdapter() - val view = RecyclerView(act) - view.adapter = adapter - adapter.setDiffNewData(routebook?.bookdata) - // 线性布局 - val layout = LinearLayout(act) - // 设置布局垂直方向 - layout.orientation = LinearLayout.VERTICAL - val m_TextView = TextView(act) - m_TextView.layoutParams = LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, - LinearLayout.LayoutParams.WRAP_CONTENT - ) - m_TextView.setBackgroundColor(Color.BLACK) - m_TextView.textSize = 18f - m_TextView.setTextColor(Color.WHITE) - m_TextView.text = "距离:" + getDisString(routebook?.totalLength ?: 0) + " 时间:" + getTimeString(routebook?.totalTime ?: 0) - m_TextView.gravity = Gravity.CENTER_HORIZONTAL - m_TextView.setPadding(0, 10, 0, 20) - layout.addView( - m_TextView, - LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, - LinearLayout.LayoutParams.WRAP_CONTENT - ) - ) - layout.addView( - view, - LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, - LinearLayout.LayoutParams.MATCH_PARENT - ) - ) - dialog.setContentView(layout) - dialog.setOnCancelListener { dialog.dismiss() } - dialog.setOnKeyListener { paramDialogInterface, paramInt, paramKeyEvent -> false } - return dialog - } - fun getNaviDialog(act: Activity): Dialog { val items = arrayOf("开始导航", "模拟导航", "路线详情", "导航设置", "语音设置") diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/FileUtils.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/FileUtils.kt index d480537ac3..76b962b737 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/FileUtils.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/FileUtils.kt @@ -30,7 +30,7 @@ object FileUtils { if (!mWorkingPath.exists()) { mWorkingPath.mkdirs() } - var files: Array + var files: Array? try { // 获得Assets文件夹下指定文件夹一共有多少文件 files = assetManager.list(assetDir); @@ -225,7 +225,7 @@ object FileUtils { val file = File(path) for (dirFile in subDirFile) { val secondList = assetManager.list("${assetDir}/${file.name}") - if (secondList.isNotEmpty() && dirFile.isDirectory && file.name.equals(dirFile.name)) { + if (secondList != null && secondList.isNotEmpty() && dirFile.isDirectory && file.name.equals(dirFile.name)) { if (isSame(assetManager, "${assetDir}/${file.name}", dirFile.path)) { count++ subDirFile.remove(dirFile) diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/Recorder.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/Recorder.kt index b4355a4daa..6ab072df93 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/Recorder.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/Recorder.kt @@ -189,7 +189,7 @@ object Recorder { } else { val context:Context? = MapDataApi.getContext() if(context != null){ - context.externalCacheDir.absolutePath +"/map/$name" + context.externalCacheDir?.absolutePath +"/map/$name" }else{ Environment.getExternalStorageDirectory().absolutePath + "/Android/data/map/$name" diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/TransformUtils.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/TransformUtils.kt index 65adb8d6f1..62d5f51a29 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/TransformUtils.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/inner/utils/TransformUtils.kt @@ -1,9 +1,6 @@ package com.zhidaoauto.map.sdk.inner.utils import android.content.Context -import com.amap.api.location.CoordinateConverter -import com.amap.api.location.CoordinateConverter.CoordType -import com.amap.api.location.DPoint import com.zhidaoauto.map.sdk.inner.abs.IMapController import java.math.BigDecimal @@ -201,41 +198,10 @@ object TransformUtils { } - fun tempTrans(param:DoubleArray,context: Context?){ - var doubleArrayParam = param -// System.out.println("origin:${doubleArrayParam.joinToString() }"); - transform(doubleArrayParam,context) -// System.out.println("middle:${index},${if(index%2==0){"GPS:"}else{"GCJ:"}}--${doubleArrayParam.joinToString()}") -// System.out.println("result:${doubleArrayParam.joinToString()}") - } - fun transform(doubleArray: DoubleArray,context: Context?){ - System.out.println("origin:${doubleArray.joinToString()}") - val point = gd_Transform(context, DPoint(doubleArray[1],doubleArray[0])) - val gdarray = doubleArrayOf(point.longitude,point.latitude) - System.out.println("gaode:${gdarray.joinToString()}") - - val mogo = transformWgs84ToGcj02(doubleArray[1], doubleArray[0]) - System.out.println("mogo:${mogo.joinToString()}") - - val gaodetoOrigin = transformGcj02toWgs84(gdarray[1], gdarray[0]) - System.out.println("gaode-to-origin:${gaodetoOrigin.joinToString()}") - - val mogotoOrigin = transformGcj02toWgs84(mogo[1], mogo[0]) - System.out.println("mogo-to-origin:${mogotoOrigin.joinToString()}") - } - fun gd_Transform(context: Context?,sourceLatLng:DPoint):DPoint{ - val converter = CoordinateConverter(context) - // CoordType.GPS 待转换坐标类型 - converter.from(CoordType.GPS) - // sourceLatLng待转换坐标点 LatLng类型 - converter.coord(sourceLatLng) - // 执行转换操作 - return converter.convert() - } fun outOfScreen(context: Context, lon: Double, lat: Double,mapController: IMapController?): Boolean{ val displayMetrics = context.resources.getDisplayMetrics() diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/MapAutoApi.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/MapAutoApi.kt index ab39b5834a..4bdb001555 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/MapAutoApi.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/MapAutoApi.kt @@ -113,32 +113,28 @@ object MapAutoApi { CommonController.instance.init(context) Recorder.i("common","$mapParams") val customPath = context.filesDir.absolutePath - if (com.zhidaoauto.map.sdk.BuildConfig.ONLINE) { - if (TextUtils.isEmpty(mapParams.getStyleDir())) { - val stylePath = "${customPath}/shmdata/mogo_style" - mapParams.setStyleDir(stylePath) - MapStyleHelper.copyAssetsToSdcard(context, "style", stylePath) - }else{ - MapStyleHelper.loadStyleOver.set(true) - } - if (!TextUtils.isEmpty(mapParams.getCachePath())) { - MapDataHelper.updateData(context, mapParams.getCachePath()!!) - }else{ - MapDataHelper.updateData(context, CommonUtils.getCachePath(context)) - } - + if (TextUtils.isEmpty(mapParams.getStyleDir())) { + val stylePath = "${customPath}/shmdata/mogo_style" + mapParams.setStyleDir(stylePath) + MapStyleHelper.copyAssetsToSdcard(context, "style", stylePath) + }else{ + MapStyleHelper.loadStyleOver.set(true) + } + if (!TextUtils.isEmpty(mapParams.getCachePath())) { + MapDataHelper.updateData(context, mapParams.getCachePath()!!) + }else{ + MapDataHelper.updateData(context, CommonUtils.getCachePath(context)) } - if (com.zhidaoauto.map.sdk.BuildConfig.MODE == 3) { - // VR - if(mapParams.getDataFileSource() == 0){ - MapHdDataHelper.initDataMgr(context) - }else if (TextUtils.isEmpty(mapParams.getHdmapPath())) { - mapParams.setHdmapPath("${customPath}/shmdata") - MapHdDataHelper.copyAssetsToSdcard(context, "hdmapData", "${customPath}/shmdata/hdmapData") - }else{ - MapHdDataHelper.loadDataOver.set(true) - } + + // VR + if(mapParams.getDataFileSource() == 0){ + MapHdDataHelper.initDataMgr(context) + }else if (TextUtils.isEmpty(mapParams.getHdmapPath())) { + mapParams.setHdmapPath("${customPath}/shmdata") + MapHdDataHelper.copyAssetsToSdcard(context, "hdmapData", "${customPath}/shmdata/hdmapData") + }else{ + MapHdDataHelper.loadDataOver.set(true) } MapHelper.init(mapParams) } diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/data/MapDataApi.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/data/MapDataApi.kt index 504b9d0d50..1f6ed7f793 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/data/MapDataApi.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/data/MapDataApi.kt @@ -34,7 +34,7 @@ object MapDataApi { return mContext } - fun startZeus(context: Context) { + fun startZeus(context: Context?) { if (CompileConfig.DEBUG) { Log.i(TAG, "mapop-start") } diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/LocationClient.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/LocationClient.kt index 948a99750c..569ba82ea5 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/LocationClient.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/LocationClient.kt @@ -4,6 +4,7 @@ import android.Manifest import android.content.Context import android.content.pm.PackageManager import android.location.Criteria +import android.location.Location import android.location.LocationManager import android.os.Bundle import android.text.TextUtils @@ -243,7 +244,7 @@ class LocationClient : android.location.LocationListener { } //使用外部数据 coor是坐标系 - fun setExtraGPSData(coor: Int, location: android.location.Location) { + fun setExtraGPSData(coor: Int, location: Location) { if (!mIsUseExtraGPSData.get()) { return } @@ -253,13 +254,13 @@ class LocationClient : android.location.LocationListener { var localLocation = MogoLocation() localLocation.lon = lon localLocation.lat = lat - localLocation.provider = location.provider + localLocation.provider = location.provider?:"gps" localLocation.speed = location.speed localLocation.altitude = location.altitude // mContext?.let { // SharedPrefsMgr.getInstance(it).putString(ConstantExt.SHARED_KEY_LOCATION, JSON.toJSONString(location)) // } - optimizeLocation(localLocation, TextUtils.equals(location.provider, Constant.GPS_RTK),location.provider.contains("RTK")) + optimizeLocation(localLocation, TextUtils.equals(location.provider, Constant.GPS_RTK),location.provider?.contains("RTK")?:false) } //使用外部数据 coor是坐标系 @@ -273,7 +274,7 @@ class LocationClient : android.location.LocationListener { optimizeLocation(location, TextUtils.equals(location.provider, Constant.GPS_RTK),location.provider.contains("RTK")) } - override fun onLocationChanged(alocation: android.location.Location?) { + override fun onLocationChanged(alocation: Location) { if (mIsUseExtraGPSData.get()) { return; } @@ -304,10 +305,10 @@ class LocationClient : android.location.LocationListener { override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) { } - override fun onProviderEnabled(provider: String?) { + override fun onProviderEnabled(provider: String) { } - override fun onProviderDisabled(provider: String?) { + override fun onProviderDisabled(provider: String) { } diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/MyLocationStyle.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/MyLocationStyle.kt index cac544b3e1..9f66999c85 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/MyLocationStyle.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/MyLocationStyle.kt @@ -12,9 +12,11 @@ import com.zhidaoauto.map.sdk.inner.abs.IMapController import com.zhidaoauto.map.sdk.inner.abs.IMarkerController import com.zhidaoauto.map.sdk.inner.utils.BitmapUtils import com.zhidaoauto.map.sdk.inner.utils.Constants +import com.zhidaoauto.map.sdk.inner.utils.TransformUtils import com.zhidaoauto.map.sdk.open.marker.Marker import com.zhidaoauto.map.sdk.open.marker.MarkerOptions import com.zhidaoauto.map.sdk.open.query.LonLatPoint +import java.util.concurrent.atomic.AtomicBoolean class MyLocationStyle(private var mContext:Context?,private var mMarkerController: IMarkerController?,private var mMapController: IMapController?) { val TAG = javaClass.simpleName @@ -57,12 +59,12 @@ class MyLocationStyle(private var mContext:Context?,private var mMarkerControlle // 3D夜间资源 var car3DResId: Int = R.raw.car - //执行标记 - private var executeFlag:AtomicBoolean = AtomicBoolean() - var guangquanResId: Int = R.raw.guangquan var locationPath: String? = null + //执行标记 + private var executeFlag: AtomicBoolean = AtomicBoolean(false) + private var animWaitFrame = ANIM_WAIT_FRAME_NIGHT private var animPeriod = ANIM_PERIOD_NIGHT @@ -212,6 +214,9 @@ class MyLocationStyle(private var mContext:Context?,private var mMarkerControlle fun setLonLat(lonLat: LonLat, angle: Double) { mMapController?.getClerk()?.add("${lonLat.lon},${lonLat.lat},${angle}") + if(TransformUtils.outOfChina(lonLat.lat, lonLat.lon)){ + return + } if (CompileConfig.DEBUG) { Log.i(TAG, "autoop--markerop---selfop-setLonLat-${lonLat},mMarker:${mMarker?.getId()}") } @@ -394,6 +399,7 @@ class MyLocationStyle(private var mContext:Context?,private var mMarkerControlle } fun exit() { + mMapController?.getClerk()?.add() executeFlag.set(false) mMarker?.remove() mMarker?.destroy() @@ -406,10 +412,11 @@ class MyLocationStyle(private var mContext:Context?,private var mMarkerControlle } if(mMarker == null){ executeFlag.set(true) - mMarker = MarkerHelper.addSelfCar(markerOptions) + mMarker = mMarkerController?.addSelfCar(markerOptions) executeFlag.set(false) } } + } \ No newline at end of file diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/sys/LocationApi.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/sys/LocationApi.kt deleted file mode 100644 index 396d49909b..0000000000 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/location/sys/LocationApi.kt +++ /dev/null @@ -1,314 +0,0 @@ -package com.zhidaoauto.map.sdk.open.location.sys - -import android.Manifest -import android.annotation.SuppressLint -import android.app.Service -import android.content.Context -import android.content.Intent -import android.content.pm.PackageManager -import android.location.* -import android.os.Bundle -import android.provider.Settings -import android.util.Log -import android.widget.Toast -import androidx.core.app.ActivityCompat -import com.zhidaoauto.map.sdk.inner.CompileConfig -import java.io.IOException -import java.util.* - -object LocationApi { - val TAG = javaClass.simpleName - - var mLocationManager: LocationManager? = null - var mListener: OnLocationChangeListener? = null - var myLocationListener: LocationListener? = null - - fun init(context: Context) { - var locationManager = context.getSystemService(Service.LOCATION_SERVICE) as LocationManager - val providerEnabled: Boolean = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) - if (providerEnabled) { - if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - return - } - locationManager.requestLocationUpdates( - LocationManager.GPS_PROVIDER, - 0, - 0.0f, - object : LocationListener { - override fun onLocationChanged(location: Location?) { - if (CompileConfig.DEBUG) { - Log.i(TAG, "locationop-onLocationChanged-${location}") - } - } - - override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) { - if (CompileConfig.DEBUG) { - Log.i( - TAG, - "locationop-onStatusChanged-provider:${provider},status:${status}" - ) - } - } - - override fun onProviderEnabled(provider: String?) { - if (CompileConfig.DEBUG) { - Log.i(TAG, "locationop-onProviderEnabled-${provider}") - } - } - - override fun onProviderDisabled(provider: String?) { - if (CompileConfig.DEBUG) { - Log.i(TAG, "locationop-onProviderDisabled-${provider}") - } - } - - }) - } - } - - - /** - * 判断Gps是否可用 - * - * @return {@code true}: 是
{@code false}: 否 - */ - fun isGpsEnabled(context: Context): Boolean { - var lm = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager - return lm.isProviderEnabled(LocationManager.GPS_PROVIDER); - } - - /** - * 判断定位是否可用 - * - * @return {@code true}: 是
{@code false}: 否 - */ - fun isLocationEnabled(context: Context): Boolean { - var lm = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager - return lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER) || lm.isProviderEnabled( - LocationManager.GPS_PROVIDER - ) - } - - /** - * 打开Gps设置界面 - */ - fun openGpsSettings(context: Context) { - var intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - context.startActivity(intent) - } - - /** - * 注册 - *

使用完记得调用{@link #unregister()}

- *

需添加权限 {@code }

- *

需添加权限 {@code }

- *

需添加权限 {@code }

- *

如果{@code minDistance}为0,则通过{@code minTime}来定时更新;

- *

{@code minDistance}不为0,则以{@code minDistance}为准;

- *

两者都为0,则随时刷新。

- * - * @param minTime 位置信息更新周期(单位:毫秒) - * @param minDistance 位置变化最小距离:当位置距离变化超过此值时,将更新位置信息(单位:米) - * @param listener 位置刷新的回调接口 - * @return {@code true}: 初始化成功
{@code false}: 初始化失败 - */ - @SuppressLint("MissingPermission") fun register( - context: Context, - minTime: Long, - minDistance: Float, - listener: OnLocationChangeListener? - ): Boolean { - if (CompileConfig.DEBUG) { - Log.e(TAG, "locationop-register") - } - if (listener == null) - return false - mLocationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager - mListener = listener - if (!isLocationEnabled(context)) { - Toast.makeText(context, "无法定位,请打开定位服务", Toast.LENGTH_SHORT).show(); - return false; - } - var provider = mLocationManager?.getBestProvider(getCriteria(), true); - var location = mLocationManager?.getLastKnownLocation(provider); - - if (location != null) { - Log.i(TAG,"locationop-getLastKnownLocation-${location}") - listener.getLastKnownLocation(location); - } - myLocationListener = object : LocationListener { - override fun onLocationChanged(location: Location?) { - Log.i(TAG,"locationop-onLocationChanged-${location}") - mListener?.onLocationChanged(location) - } - - override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) { - mListener?.onStatusChanged(provider, status, extras) - when (status) { - LocationProvider.AVAILABLE -> - if (CompileConfig.DEBUG) { - Log.e("onStatusChanged", "locationop-当前GPS状态为可见状态") - }; - LocationProvider.OUT_OF_SERVICE -> - if (CompileConfig.DEBUG) { - Log.e("onStatusChanged", "locationop-当前GPS状态为服务区外状态") - } - LocationProvider.TEMPORARILY_UNAVAILABLE -> - if (CompileConfig.DEBUG) { - Log.e("onStatusChanged", "locationop-当前GPS状态为暂停服务状态") - }; - } - } - - override fun onProviderEnabled(provider: String?) { - } - - override fun onProviderDisabled(provider: String?) { - } - - } - mLocationManager?.requestLocationUpdates( - provider, - minTime, - minDistance, - myLocationListener - ); - return true; - } - - - /** - * 注销 - */ - fun unregister() { - if (mLocationManager != null) { - if (myLocationListener != null) { - mLocationManager?.removeUpdates(myLocationListener); - myLocationListener = null; - } - mLocationManager = null; - } - } - - /** - * 设置定位参数 - * - * @return {@link Criteria} - */ - fun getCriteria(): Criteria { - var criteria = Criteria() - //设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 - criteria.setAccuracy(Criteria.ACCURACY_FINE); - //设置是否要求速度 - criteria.setSpeedRequired(true); - // 设置是否允许运营商收费 - criteria.setCostAllowed(true); - //设置是否需要方位信息 - criteria.setBearingRequired(true); - //设置是否需要海拔信息 - criteria.setAltitudeRequired(true); - // 设置对电源的需求 - criteria.setPowerRequirement(Criteria.POWER_HIGH); - return criteria; - } - - /** - * 根据经纬度获取地理位置 - * - * @param context 上下文 - * @param latitude 纬度 - * @param longitude 经度 - * @return {@link Address} - */ - fun getAddress(context: Context, latitude: Double, longitude: Double): Address? { - var geocoder = Geocoder(context, Locale.getDefault()); - try { - var addresses = geocoder.getFromLocation(latitude, longitude, 1) - if (addresses.size > 0) - return addresses.get(0); - - } catch (e: IOException) { - e.printStackTrace(); - } - return null - } - - /** - * 根据经纬度获取所在国家 - * - * @param context 上下文 - * @param latitude 纬度 - * @param longitude 经度 - * @return 所在国家 - */ - fun getCountryName(context: Context, latitude: Double, longitude: Double): String { - var address = getAddress(context, latitude, longitude); - address?.let { - return it.getCountryName() - } - return "unknown" - } - - /** - * 根据经纬度获取所在地 - * - * @param context 上下文 - * @param latitude 纬度 - * @param longitude 经度 - * @return 所在地 - */ - fun getLocality(context: Context, latitude: Double, longitude: Double): String { - var address = getAddress(context, latitude, longitude) - address?.let { - return it.getLocality() - } - return "unknown" - } - - /** - * 根据经纬度获取所在街道 - * - * @param context 上下文 - * @param latitude 纬度 - * @param longitude 经度 - * @return 所在街道 - */ - - fun getStreet(context: Context, latitude: Double, longitude: Double): String { - var address = getAddress(context, latitude, longitude) - address?.let { - return it.getAddressLine(0) - } - return "unknown" - } - - interface OnLocationChangeListener { - - /** - * 获取最后一次保留的坐标 - * - * @param location 坐标 - */ - fun getLastKnownLocation(location: Location) - - /** - * 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发 - * - * @param location 坐标 - */ - fun onLocationChanged(location: Location?) - - /** - * provider的在可用、暂时不可用和无服务三个状态直接切换时触发此函数 - * - * @param provider 提供者 - * @param status 状态 - * @param extras provider可选包 - */ - fun onStatusChanged(provider: String?, status: Int, extras: Bundle?);//位置状态发生改变 - } - - -} \ No newline at end of file diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/BitmapDescriptor.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/BitmapDescriptor.kt index 3211db14f8..ad966f4d01 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/BitmapDescriptor.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/BitmapDescriptor.kt @@ -34,19 +34,22 @@ public class BitmapDescriptor : Parcelable, Cloneable { } public override fun clone(): BitmapDescriptor { - return try { - BitmapDescriptor( - Bitmap.createBitmap(bitmap), - width, - height - ) - } catch (var3: Throwable) { - return BitmapDescriptor( - Bitmap.createBitmap(bitmap), - width, - height - ) + bitmap?.let { + return try { + BitmapDescriptor( + Bitmap.createBitmap(it), + width, + height + ) + } catch (var3: Throwable) { + return BitmapDescriptor( + Bitmap.createBitmap(it), + width, + height + ) + } } + return BitmapDescriptor(bitmap) } /** diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/Marker.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/Marker.kt index 23fe03d9c8..263817b51c 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/Marker.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/Marker.kt @@ -57,7 +57,7 @@ public class Marker(private var markerOptions: MarkerOptions,private var mMapCon private var historyLocationList: ArrayList? = null private var mHandler: Handler = object : Handler(Looper.getMainLooper()) { - override fun handleMessage(msg: Message?) { + override fun handleMessage(msg: Message) { super.handleMessage(msg) var type = msg?.arg1 var animation: Animation? = markerAnimationMap.get(type) diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/MarkerCacheController.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/MarkerCacheController.kt index 578ee1269c..d6c7fb8ec8 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/MarkerCacheController.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/marker/MarkerCacheController.kt @@ -12,6 +12,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CopyOnWriteArrayList +import java.util.concurrent.atomic.AtomicBoolean class MarkerCacheController(private val mapAutoView: MapAutoView) { @@ -19,7 +20,8 @@ class MarkerCacheController(private val mapAutoView: MapAutoView) { private var taskJob: Job? = null var cacheInterval = 300 - private var exit: Boolean = false + private var isExecuting: AtomicBoolean = AtomicBoolean() + //设置是否开启更新锚点策略,默认关闭 var delayStrategy: Boolean = false @@ -53,7 +55,7 @@ class MarkerCacheController(private val mapAutoView: MapAutoView) { init { lastPreTime = 0L - exit = false + isExecuting.set(false) lastPreTime = 0L } @@ -119,7 +121,9 @@ class MarkerCacheController(private val mapAutoView: MapAutoView) { fun addCache(dataSet: MarkerDataSet?) { if(taskJob == null){ - execute() + if(!isExecuting.get()){ + execute() + } } if (dataSet == null) { return @@ -155,7 +159,9 @@ class MarkerCacheController(private val mapAutoView: MapAutoView) { @Synchronized fun addCache(originBatchData: MarkerBatchData?) { if(taskJob == null){ - execute() + if(!isExecuting.get()){ + execute() + } } if (CompileConfig.DEBUG) { Log.i(TAG, "addCache:life-start") @@ -420,8 +426,8 @@ class MarkerCacheController(private val mapAutoView: MapAutoView) { } fun destory() { - exit = true taskJob?.cancel() + isExecuting.set(false) taskJob = null timeList.clear() cacheMap.clear() @@ -433,9 +439,10 @@ class MarkerCacheController(private val mapAutoView: MapAutoView) { @Synchronized private fun execute() { + isExecuting.set(true) taskJob?.cancel() taskJob = mapAutoView.getMapController()?.getDemaningScope()?.launch(Dispatchers.IO) { - while (!exit) { + while (isExecuting.get()) { if (dataStrategy) { if (!timeList.isEmpty() && !cacheMap.isEmpty()) { diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/nav/view/TmcBarView.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/nav/view/TmcBarView.kt index 6a2b2548f9..6be6bf3600 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/nav/view/TmcBarView.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/nav/view/TmcBarView.kt @@ -122,17 +122,23 @@ class TmcBarView : View { ////计算tmcBar在绘制过程中每一小段的长度 val itemHeight = Math.round(trafficStatus.getLength() * rateDistanceToViewHeight * 100.0f) * 0.01f realDistanceSum += itemHeight - canvas.drawRect(0.0f, realDistanceSum - itemHeight, width.toFloat(), realDistanceSum, getPaintInColor(getColor(trafficStatus.getStatus()))) + getPaintInColor(getColor(trafficStatus.getStatus()))?.let { + canvas.drawRect(0.0f, realDistanceSum - itemHeight, width.toFloat(), realDistanceSum, it) + } --tmcBarLength } tmcBarLength = height + (mCarHeight shr 1) //补全光柱图,使用颜色==第一段的颜色 if (realDistanceSum < tmcBarLength.toFloat()) { - canvas.drawRect(0.0f, realDistanceSum, width.toFloat(), tmcBarLength.toFloat(), getPaintInColor(getColor((mTmcBarItems!![0]).getStatus()))) + getPaintInColor(getColor((mTmcBarItems!![0]).getStatus()))?.let { + canvas.drawRect(0.0f, realDistanceSum, width.toFloat(), tmcBarLength.toFloat(), it) + } } //补全光柱图,使用颜色==第一段的颜色 if (this.height.toFloat() > mCursorPos) { - canvas.drawRect(0.0f, mCursorPos + (mCarHeight shr 1).toFloat(), width.toFloat(), this.height.toFloat(), getPaintInColor(getColor(-1))) + getPaintInColor(getColor(-1))?.let { + canvas.drawRect(0.0f, mCursorPos + (mCarHeight shr 1).toFloat(), width.toFloat(), this.height.toFloat(), it) + } } if (mTmcBarListener != null) { mTmcBarListener!!.dismissBottomTag() diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/nav/view/TrafficProgressBar.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/nav/view/TrafficProgressBar.kt index 85bd8989eb..e728517218 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/nav/view/TrafficProgressBar.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/nav/view/TrafficProgressBar.kt @@ -12,13 +12,13 @@ import kotlinx.android.synthetic.main.view_trafficbar.view.tmcBarTxt import kotlinx.android.synthetic.main.view_trafficbar.view.tmcBarView class TrafficProgressBar : FrameLayout { - constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) { + constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) { init() } - constructor(context: Context?) : super(context) { + constructor(context: Context) : super(context) { init() } - constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { init() } diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/tools/MonitorPressApi.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/tools/MonitorPressApi.kt index f27d0e59fe..3cdcb5954d 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/tools/MonitorPressApi.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/tools/MonitorPressApi.kt @@ -2,13 +2,16 @@ package com.zhidaoauto.map.sdk.open.tools import android.content.Context import android.util.Log +import android.widget.FrameLayout import com.zhidaoauto.map.sdk.inner.CompileConfig import com.zhidaoauto.map.sdk.open.view.MapAutoView import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.io.IOException +import kotlin.random.Random class MonitorPressApi { @@ -94,7 +97,7 @@ class MonitorPressApi { TaskManager.instance.resetTask() - val rv = (Math.random() * 16).toInt() + val rv = (Math.random() * 17).toInt() var trackIndex = (Math.random() * (mFiles!!.size - 1)).toInt() if(CompileConfig.DEBUG){ Log.i(TAG, "onClick--randomop: rv:${rv},trackIndex:${trackIndex}") @@ -152,6 +155,20 @@ class MonitorPressApi { // TaskManager.instance.monitorMarkerAdd(trackIndex,mapAutoView) TaskManager.instance.monitorCancleCacheHdData() } + 16 -> { + withContext(Dispatchers.Main){ + val per = Random.nextDouble() + val layoutParams = mapAutoView.layoutParams as FrameLayout.LayoutParams + layoutParams.width = (2560 * per).toInt() + layoutParams.height = (1400 * per).toInt() + + mapAutoView.layoutParams = layoutParams + if(CompileConfig.DEBUG){ + Log.i(TAG, "resizeop:${layoutParams.width},${layoutParams.height}--${layoutParams}") + } + mapAutoView.postInvalidate() + } + } else -> { TaskManager.instance.monitor2DMarkerAdd(trackIndex,mapAutoView) diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoView.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoView.kt index f0a572321b..47dce91289 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoView.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoView.kt @@ -230,7 +230,7 @@ open class MapAutoView : FrameLayout, LonLatPointListener, ITraffic,ILockLocatio */ private fun handlerInitMapView() { //BuildConfig.MODE: 1.offline 2.online 3.VR - if (MapStyleHelper.loadStyleOver.get() && ((MapHdDataHelper.loadDataOver.get() && BuildConfig.MODE >= 3) || BuildConfig.MODE < 3)) { + if (MapStyleHelper.loadStyleOver.get() && MapHdDataHelper.loadDataOver.get()) { initMapView() } else { mHandler.removeCallbacksAndMessages(MSG_MAP_INIT) @@ -293,7 +293,7 @@ open class MapAutoView : FrameLayout, LonLatPointListener, ITraffic,ILockLocatio } - fun initMapView() { + private fun initMapView() { if (CompileConfig.DEBUG) { Log.i(TAG, "autoop-mapop-initMapView--start") } @@ -363,7 +363,9 @@ open class MapAutoView : FrameLayout, LonLatPointListener, ITraffic,ILockLocatio } } } - + if(mogoLocation.lon == 0.0 || mogoLocation.lat == 0.0){ + return + } val lonLatPoint = LonLatPoint(mogoLocation.lon, mogoLocation.lat,mogoLocation.altitude,mogoLocation.heading) lonLatPoint.provider = mogoLocation.provider if (CompileConfig.DEBUG) { @@ -388,7 +390,9 @@ open class MapAutoView : FrameLayout, LonLatPointListener, ITraffic,ILockLocatio } } } - + if(lonLatPoint.longitude == 0.0 || lonLatPoint.latitude == 0.0){ + return + } if(CompileConfig.DEBUG) { Log.i(TAG, "autoop-locationop-lockop-onLocationChanged-location:${lonLatPoint}") } diff --git a/libraries/mogo-map/build.gradle b/libraries/mogo-map/build.gradle index 999314cc4e..a842c029d7 100644 --- a/libraries/mogo-map/build.gradle +++ b/libraries/mogo-map/build.gradle @@ -51,8 +51,8 @@ dependencies { implementation rootProject.ext.dependencies.arouter kapt rootProject.ext.dependencies.aroutercompiler // 高精地图 - implementation rootProject.ext.dependencies.mogocustommap -// implementation project(':libraries:mapmodule') +// implementation rootProject.ext.dependencies.mogocustommap + implementation project(':libraries:mapmodule') // 高德地图 // api rootProject.ext.dependencies.amaplocation api rootProject.ext.dependencies.amapnavi3dmap diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index a01b9faa77..83ab626936 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -62,6 +62,7 @@ import com.mogo.map.utils.MogoMapUtils; import com.mogo.map.utils.ObjectUtils; import com.mogo.map.utils.ResIdCache; import com.zhidaoauto.map.sdk.open.MapAutoApi; +import com.zhidaoauto.map.sdk.open.abs.IResult; import com.zhidaoauto.map.sdk.open.abs.MapStatusListener; import com.zhidaoauto.map.sdk.open.abs.OnCameraChangeListener; import com.zhidaoauto.map.sdk.open.abs.OnHdDataDownByCityListener; @@ -83,11 +84,12 @@ import com.zhidaoauto.map.sdk.open.location.LocationClient; import com.zhidaoauto.map.sdk.open.location.MyLocationStyle; import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptorFactory; import com.zhidaoauto.map.sdk.open.marker.Marker; -import com.zhidaoauto.map.sdk.open.marker.MarkerHelper; import com.zhidaoauto.map.sdk.open.marker.OnMarkClickListener; import com.zhidaoauto.map.sdk.open.query.LonLatPoint; import com.zhidaoauto.map.sdk.open.road.RoadCross; +import com.zhidaoauto.map.sdk.open.road.RoadRectInfos; import com.zhidaoauto.map.sdk.open.road.StopLine; +import com.zhidaoauto.map.sdk.open.routeinfo.RoadInfo; import com.zhidaoauto.map.sdk.open.tools.MapTools; import com.zhidaoauto.map.sdk.open.view.MapAutoView; import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper; @@ -136,7 +138,7 @@ public class AMapViewWrapper implements IMogoMapView, private void initViews() { // 初始化首次地图进入的时候的样式, MapAutoApi.INSTANCE.init(context, mapParams);将影响这里的数据 - int mapStyle = MapAutoApi.INSTANCE.getMapParams().getStyleMode(); + int mapStyle = mMapView.getMapStyleParams().getStyleMode(); CallerLogger.INSTANCE.d(M_MAP + TAG, "默认配置地图模式:mapStyle=" + mapStyle); switch (mapStyle) { case MapAutoApi.MAP_STYLE_DAY: @@ -197,7 +199,7 @@ public class AMapViewWrapper implements IMogoMapView, mMapView.setOnRoamStatusListener(this); mMapView.setOnMapViewVisualAngleChangeListener(this); mMapView.setOnRoadInfoListener(this, 1); - MapAutoApi.INSTANCE.registerLogListener(this); + MapAutoApi.INSTANCE.registerLogListener(this,mMapView.getEventController()); CallerLogger.INSTANCE.d(M_MAP + TAG, "styleop - initListeners - setOnMapStyleListener - view " + mMapView); } @@ -225,14 +227,14 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void onStopLineInfo(@androidx.annotation.Nullable StopLine stopLine) { MogoLocation carLoc = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84(); - if (stopLine != null && stopLine.road_id != null && !stopLine.road_id.isEmpty() && stopLine.points != null && stopLine.points.size() > 0) { - ArrayList points = stopLine.points; + if (stopLine != null && stopLine.getRoad_id() != null && !stopLine.getRoad_id().isEmpty() && stopLine.getPoints() != null && stopLine.getPoints().size() > 0) { + ArrayList points = stopLine.getPoints(); if (carLoc != null) { // //CallerLogger.INSTANCE.d(M_MAP + TAG, "onStopLineInfo:stop_line" + stopLine + ", car_loc:{lon: " + carLoc.getLatitude() + ", lat: " + carLoc.getLongitude() + "}"); MapRoadInfo.StopLine stopInfo = convert(stopLine); LonLatPoint p1 = points.get(0); LonLatPoint p2 = points.get(points.size() - 1); - double distanceOfCarToStopLine = MapDataApi.INSTANCE.getNearstFromPointToSegment(carLoc.getLongitude(), carLoc.getLatitude(), p1.longitude, p1.latitude, p2.longitude, p2.latitude) * 10_0000; + double distanceOfCarToStopLine = MapDataApi.INSTANCE.getNearstFromPointToSegment(carLoc.getLongitude(), carLoc.getLatitude(), p1.getLongitude(), p1.getLatitude(), p2.getLongitude(), p2.getLatitude()) * 10_0000; stopInfo.setDistanceOfCarToStopLine(distanceOfCarToStopLine); //CallerLogger.INSTANCE.d(M_MAP + TAG, "onStopLineInfo: --- distance: " + distanceOfCarToStopLine); CallerMapRoadListenerManager.INSTANCE.invokeListenersOnStopLineGet(stopInfo); @@ -246,21 +248,21 @@ public class AMapViewWrapper implements IMogoMapView, private MapRoadInfo.StopLine convert(StopLine line) { MapRoadInfo.StopLine ret = new MapRoadInfo.StopLine(); - ret.setDistance(line.distance); - ret.setLaneId(line.lane_id); - ret.setRoadId(line.road_id); - ret.setTieId(line.tile_id); - ArrayList points = line.points; + ret.setDistance(line.getDistance()); + ret.setLaneId(line.getLane_id()); + ret.setRoadId(line.getRoad_id()); + ret.setTieId(line.getTile_id()); + ArrayList points = line.getPoints(); if (points != null && points.size() > 0) { List newPoints = new ArrayList<>(); for (int i = 0; i < points.size(); i++) { LonLatPoint lonLatPoint = points.get(i); - MogoLatLng latLng = new MogoLatLng(lonLatPoint.latitude, lonLatPoint.longitude); - latLng.duration = lonLatPoint.duration; - latLng.angle = lonLatPoint.angle; - latLng.speed = lonLatPoint.speed; - latLng.altitude = lonLatPoint.altitude; - latLng.provider = lonLatPoint.provider; + MogoLatLng latLng = new MogoLatLng(lonLatPoint.getLatitude(), lonLatPoint.getLongitude()); + latLng.duration = lonLatPoint.getDuration(); + latLng.angle = lonLatPoint.getAngle(); + latLng.speed = lonLatPoint.getSpeed(); + latLng.altitude = lonLatPoint.getAltitude(); + latLng.provider = lonLatPoint.getProvider(); newPoints.add(latLng); } ret.setPoints(newPoints); @@ -316,7 +318,7 @@ public class AMapViewWrapper implements IMogoMapView, mMapView.setOnMapTouchListener(null); mMapView.setOnMapClickListener(null); mMapView.setOnCameraChangeListener(null); - MapAutoApi.INSTANCE.unregisterLogListener(this); + MapAutoApi.INSTANCE.unregisterLogListener(this,mMapView.getEventController()); CallerLogger.INSTANCE.d(M_MAP + TAG, "map onDestroy"); } @@ -485,7 +487,7 @@ public class AMapViewWrapper implements IMogoMapView, public void initMyLocation() { if (checkAMapView()) { - MarkerHelper.INSTANCE.addPreModel(R.raw.guangquan); + mMapView.getMarkerController().addPreModel(R.raw.guangquan); // MarkerHelper.addPreModel(R.raw.guangquan_day) mMapView.getMapAutoViewHelper().setMyLocationEnabled(true); } @@ -509,13 +511,13 @@ public class AMapViewWrapper implements IMogoMapView, @Override public MogoLatLng getCameraNorthEastPosition() { - return ObjectUtils.fromAMap(MapTools.INSTANCE.getVisibleRegion().getRightTopPoint()); + return ObjectUtils.fromAMap(MapTools.INSTANCE.getVisibleRegion(mMapView.getMapController()).getRightTopPoint()); } @Override public MogoLatLng getCameraSouthWestPosition() { try { - return ObjectUtils.fromAMap(MapTools.INSTANCE.getVisibleRegion().getLeftBottomPoint()); + return ObjectUtils.fromAMap(MapTools.INSTANCE.getVisibleRegion(mMapView.getMapController()).getLeftBottomPoint()); } catch (Exception e) { e.printStackTrace(); } @@ -549,7 +551,7 @@ public class AMapViewWrapper implements IMogoMapView, public Point getLocationPointInScreen(MogoLatLng latLng) { if (checkAMapView()) { try { - return MapTools.INSTANCE.toScreenLocation(ObjectUtils.fromMogo(latLng)); + return MapTools.INSTANCE.toScreenLocation(ObjectUtils.fromMogo(latLng),mMapView.getMapController()); } catch (Exception e) { e.printStackTrace(); return null; @@ -563,7 +565,7 @@ public class AMapViewWrapper implements IMogoMapView, if (checkAMapView()) { try { return ObjectUtils.fromAMap( - MapTools.INSTANCE.fromScreenLocation(point)); + MapTools.INSTANCE.fromScreenLocation(point,mMapView.getMapController())); } catch (Exception e) { e.printStackTrace(); return null; @@ -701,15 +703,7 @@ public class AMapViewWrapper implements IMogoMapView, return getMap().getUIController().getTileId(lon, lat); } - @Override - public int getLimitSpeed(double lon, double lat, float angle) { - return MapDataApi.INSTANCE.getLimitSpeed(lon, lat, angle); - } - @Override - public CenterLine getCenterLineInfo(double lon, double lat, float angle) { - return ObjectUtils.transformCenterLine(MapDataApi.INSTANCE.getCenterLineInfo(lon, lat, angle)); - } @Override public void result(@NonNull String filePath) { @@ -917,10 +911,6 @@ public class AMapViewWrapper implements IMogoMapView, return MapAutoApi.INSTANCE.getAngle(startLon, startLat, endLon, endLat); } - @Override - public Double getRoadAngle(Double lon, Double lat, float angle) { - return MapDataApi.INSTANCE.getRoadRectInfo(lon, lat, angle).getAngle(); - } /** * 加载3D模型 @@ -1023,7 +1013,7 @@ public class AMapViewWrapper implements IMogoMapView, public void setIsDrawPointCloud(Boolean isDrawPointCloud) { try { // 是否绘制点云 - PointCloudHelper.INSTANCE.setIsDrawPointCloud(isDrawPointCloud); + PointCloudHelper.INSTANCE.setIsDrawPointCloud(isDrawPointCloud,mMapView.getMapController()); } catch (Exception e) { e.printStackTrace(); } @@ -1032,13 +1022,13 @@ public class AMapViewWrapper implements IMogoMapView, @Override public void setPointCloudSize(Float pointCloudSize) { //设置点云大小 - PointCloudHelper.INSTANCE.setPointCloudSize(pointCloudSize); + PointCloudHelper.INSTANCE.setPointCloudSize(pointCloudSize,mMapView.getMapController()); } @Override public void setPointCloudColor(String color) { // 设置点云颜色 - PointCloudHelper.INSTANCE.setPointCloudColor(color); + PointCloudHelper.INSTANCE.setPointCloudColor(color,mMapView.getMapController()); } @Override @@ -1130,14 +1120,20 @@ public class AMapViewWrapper implements IMogoMapView, CallerLogger.INSTANCE.i(M_MAP + TAG, "gdCityCode is:" + gdCityCode); Integer id = HDMapUtils.getHDCityCode(gdCityCode); if (id != null) { - List cityInfoList = mMapView.getMapAutoViewHelper().getAllCityCode(); - if (cityInfoList != null) { - for (CityInfo cityInfo : cityInfoList) { - if (id == cityInfo.getCityCode()) { - return cityInfo.isCache; + //TODO 回调改造 + mMapView.getMapAutoViewHelper().getAllCityCode(new IResult>() { + @Override + public void result(int code, @androidx.annotation.Nullable ArrayList cityInfoList) { + if (cityInfoList != null) { + for (CityInfo cityInfo : cityInfoList) { + if (id == cityInfo.getCityCode()) { +// return cityInfo.isCache(); + } + } } } - } + }); + } } return false; diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java index ff37c1c16e..1d63b3d209 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.java @@ -3,7 +3,9 @@ package com.mogo.map; import android.annotation.SuppressLint; import android.graphics.Point; import android.util.Pair; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; + +import androidx.annotation.Nullable; + import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.map.center.CenterLine; import com.mogo.map.overlay.proxy.line.IMapPolylineOverlay; @@ -13,11 +15,11 @@ import com.mogo.map.road.RoadNameInfo; import com.mogo.map.uicontroller.AMapUIController; import com.mogo.map.uicontroller.IMogoMapUIController; 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.data.SinglePointRoadInfo; import com.zhidaoauto.map.sdk.open.marker.BatchMarkerOptions; import com.zhidaoauto.map.sdk.open.marker.Marker; -import com.zhidaoauto.map.sdk.open.marker.MarkerHelper; import com.zhidaoauto.map.sdk.open.marker.MarkerOptions; import com.zhidaoauto.map.sdk.open.marker.MarkerSimpleData; import com.zhidaoauto.map.sdk.open.poyline.Polyline; @@ -87,7 +89,7 @@ public class AMapWrapper implements IMogoMap { if (!checkAMap()) { return null; } - MarkerOptions markerOptions = ObjectUtils.fromMogo(options); + MarkerOptions markerOptions = ObjectUtils.fromMogo(options,mMapView); if (markerOptions == null) { CallerLogger.INSTANCE.e(TAG, "marker参数为空"); return null; @@ -96,7 +98,7 @@ public class AMapWrapper implements IMogoMap { if (delegate == null) { return null; } - return new AMapPointWrapper(options.getId(), delegate); + return new AMapPointWrapper(options.getId(), delegate,mMapView); } @Override @@ -104,16 +106,16 @@ public class AMapWrapper implements IMogoMap { if (!checkAMap()) { return null; } - PolylineOptions polylineOptions = ObjectUtils.fromMogo(options); + PolylineOptions polylineOptions = ObjectUtils.fromMogo(options,mMapView); if (polylineOptions == null) { CallerLogger.INSTANCE.e(TAG, "polyline参数为空"); return null; } - Polyline delegate = polylineOptions.lineWidth > 0 ? mAMap.drawThickLine(polylineOptions) : mAMap.drawLine(polylineOptions); + Polyline delegate = polylineOptions.getLineWidth() > 0 ? mAMap.drawThickLine(polylineOptions) : mAMap.drawLine(polylineOptions); if (delegate == null) { return null; } - return new com.mogo.map.overlay.wrapper.line.AMapPolylineWrapper(options.getId(), delegate); + return new com.mogo.map.overlay.wrapper.line.AMapPolylineWrapper(options.getId(), delegate,mMapView); } BatchMarkerOptions batchMarkerOptions = new BatchMarkerOptions(); @@ -138,13 +140,15 @@ public class AMapWrapper implements IMogoMap { return; } long time = markerOptionsArrayList.get(0).getTime(); - batchMarkerOptions.list = markerOptionsArrayList; - batchMarkerOptions.delayStrategy = false; - batchMarkerOptions.ruleAngle = 8.0f; - batchMarkerOptions.controlIcon = 1; - batchMarkerOptions.satelliteTime = time; - batchMarkerOptions.deleteRule = 0; - MarkerHelper.INSTANCE.updateBatchMarkerPositon(batchMarkerOptions); + batchMarkerOptions.setList(markerOptionsArrayList); + batchMarkerOptions.setDelayStrategy(false); + batchMarkerOptions.setRuleAngle(8.0f); + batchMarkerOptions.setControlIcon(1); + batchMarkerOptions.setSatelliteTime(time); + batchMarkerOptions.setDeleteRule(0); + if(mMapView.getMarkerController() != null){ + mMapView.getMarkerController().updateBatchMarkerPositon(batchMarkerOptions); + } } BatchMarkerOptions aiBatchMarkerOptions = new BatchMarkerOptions(); @@ -170,19 +174,23 @@ public class AMapWrapper implements IMogoMap { } long time = markerOptionsArrayList.get(0).getTime(); // 最后一个参数,是否管理锚点的删除 - aiBatchMarkerOptions.list = markerOptionsArrayList; - aiBatchMarkerOptions.delayStrategy = false; - aiBatchMarkerOptions.ruleAngle = 8.0f; - aiBatchMarkerOptions.controlIcon = 1; - aiBatchMarkerOptions.satelliteTime = time; - aiBatchMarkerOptions.deleteRule = 0; - MarkerHelper.INSTANCE.updateBatchMarkerPositon(aiBatchMarkerOptions); + aiBatchMarkerOptions.setList(markerOptionsArrayList); + aiBatchMarkerOptions.setDelayStrategy(false); + aiBatchMarkerOptions.setRuleAngle(8.0f); + aiBatchMarkerOptions.setControlIcon(1); + aiBatchMarkerOptions.setSatelliteTime(time); + aiBatchMarkerOptions.setDeleteRule(0); + if(mMapView.getMarkerController() != null) { + mMapView.getMarkerController().updateBatchMarkerPositon(aiBatchMarkerOptions); + } } @Override public String addPreVehicleModel(int type, int modelRes) { try { - return MarkerHelper.INSTANCE.addPreVehicleModel(type, modelRes); + if(mMapView.getMarkerController() != null){ + return mMapView.getMarkerController().addPreVehicleModel(type, modelRes); + } } catch (Exception e) { e.printStackTrace(); } @@ -192,7 +200,9 @@ public class AMapWrapper implements IMogoMap { @Override public void removeMarker(String uuidString) { try { - MarkerHelper.INSTANCE.removeMarker(uuidString); + if(mMapView.getMarkerController() != null){ + mMapView.getMarkerController().removeMarker(uuidString); + } } catch (Exception e) { e.printStackTrace(); } @@ -215,7 +225,7 @@ public class AMapWrapper implements IMogoMap { @Override public void setPointToCenter(int x, int y) { if (checkAMap()) { - LonLatPoint lonLatPoint = MapTools.INSTANCE.fromScreenLocation(new Point(x, y)); + LonLatPoint lonLatPoint = MapTools.INSTANCE.fromScreenLocation(new Point(x, y), mMapView.getMapController()); mAMap.setCenter(lonLatPoint); } } @@ -273,20 +283,7 @@ public class AMapWrapper implements IMogoMap { return singlePointRoadInfo != null ? singlePointRoadInfo.getLaneWidth() : 0; } - @Override - public CenterLine getCenterLineRangeInfo(double lon, double lat, float angle, float distance) { - try { - com.zhidaoauto.map.sdk.open.road.CenterLine info = MapDataApi.INSTANCE.getCenterLineRangeInfo(lon, lat, angle, distance); - CenterLine ret = null; - if (info != null) { - ret = new CenterLine(info.id, info.tile_id, info.road_id, info.lane_id, convert(info.points), info.angle == null ? 0f : info.angle); - } - return ret; - } catch (Throwable t) { - t.printStackTrace(); - return null; - } - } + @Override public RoadNameInfo getRoadName(double lon, double lat, float angle) { @@ -298,14 +295,5 @@ public class AMapWrapper implements IMogoMap { return null; } - private List> convert(List points) { - if (points == null || points.isEmpty()) { - return Collections.emptyList(); - } - List> ret = new ArrayList<>(points.size()); - for (LonLatPoint p : points) { - ret.add(Pair.create(p.longitude, p.latitude)); - } - return ret; - } + } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt new file mode 100644 index 0000000000..7802d22176 --- /dev/null +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt @@ -0,0 +1,126 @@ +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){ + MapDataApi.getCenterLineInfo( + lon, + lat, + angle, + object : IResult { + 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) { + MapDataApi.getLimitSpeed(lon, lat, angle, object : IResult { + 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) { + MapDataApi.getRoadRectInfo(lon, lat, angle, object : IResult { + 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 + ) { + try { + + MapDataApi.getCenterLineRangeInfo( + lon, + lat, + angle, + distance, + object : IResult { + 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?): List> { + if (points == null || points.isEmpty()) { + return emptyList() + } + val ret: MutableList> = ArrayList(points.size) + for (p in points) { + ret.add(Pair.create(p.longitude, p.latitude)) + } + return ret + } + +} \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/overlay/wrapper/line/AMapPolylineWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/overlay/wrapper/line/AMapPolylineWrapper.kt index 39f9ffdefe..2736849b8f 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/overlay/wrapper/line/AMapPolylineWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/overlay/wrapper/line/AMapPolylineWrapper.kt @@ -4,9 +4,10 @@ import com.mogo.map.overlay.line.Polyline.Options import com.mogo.map.overlay.proxy.line.* import com.mogo.map.utils.ObjectUtils import com.zhidaoauto.map.sdk.open.poyline.* +import com.zhidaoauto.map.sdk.open.view.MapAutoView import java.util.concurrent.atomic.* -class AMapPolylineWrapper(private val id: String, private val delegate: Polyline): IMapPolylineOverlay { +class AMapPolylineWrapper(private val id: String, private val delegate: Polyline,private val mMapAutoView: MapAutoView): IMapPolylineOverlay { private val isDestroyed by lazy { AtomicBoolean(false) } @@ -63,7 +64,7 @@ class AMapPolylineWrapper(private val id: String, private val delegate: Polyline return } delegate.also { - val option = ObjectUtils.fromMogo(options) + val option = ObjectUtils.fromMogo(options,mMapAutoView) if (option != null) { it.setOption(option) } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/overlay/wrapper/point/AMapPointWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/overlay/wrapper/point/AMapPointWrapper.kt index 2c1cb3afc4..75e12788ba 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/overlay/wrapper/point/AMapPointWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/overlay/wrapper/point/AMapPointWrapper.kt @@ -6,9 +6,10 @@ import com.mogo.map.overlay.proxy.point.* import com.mogo.map.utils.ObjectUtils import com.zhidaoauto.map.sdk.open.marker.* import com.zhidaoauto.map.sdk.open.query.LonLatPoint +import com.zhidaoauto.map.sdk.open.view.MapAutoView import java.util.concurrent.atomic.AtomicBoolean -class AMapPointWrapper(private val id: String, private val delegate: Marker): IMapPointOverlay { +class AMapPointWrapper(private val id: String, private val delegate: Marker, private val mMapAutoView: MapAutoView): IMapPointOverlay { private val isDestroyed by lazy { AtomicBoolean(false) } @@ -71,7 +72,7 @@ class AMapPointWrapper(private val id: String, private val delegate: Marker): IM if (isDestroyed.get() || isRemoved.get()) { return } - delegate.setMarkerOptions(ObjectUtils.fromMogo(opt)) + delegate.setMarkerOptions(ObjectUtils.fromMogo(opt,mMapAutoView)) } override fun addDynamicAnchorPosition(point: MogoLatLng, angle: Float, duration: Long) { diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java b/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java index c7358e8c95..773e5df7ea 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/utils/ObjectUtils.java @@ -17,6 +17,7 @@ import com.zhidaoauto.map.sdk.open.marker.MarkerOptions; import com.zhidaoauto.map.sdk.open.marker.MarkerSimpleData; import com.zhidaoauto.map.sdk.open.poyline.PolylineOptions; import com.zhidaoauto.map.sdk.open.query.LonLatPoint; +import com.zhidaoauto.map.sdk.open.view.MapAutoView; import java.util.ArrayList; import java.util.List; @@ -32,7 +33,7 @@ import mogo.yycp.api.proto.SocketDownData; */ public class ObjectUtils { - public static MarkerOptions fromMogo(Point.Options opt) { + public static MarkerOptions fromMogo(Point.Options opt, MapAutoView mapAutoView) { if (opt == null) { return null; @@ -49,15 +50,15 @@ public class ObjectUtils { } MarkerOptions markerOptions; if(TextUtils.isEmpty(opt.getId())){ - markerOptions = new MarkerOptions(); + markerOptions = new MarkerOptions(mapAutoView.getMapController()); }else{ - markerOptions = new MarkerOptions(opt.getId()); + markerOptions = new MarkerOptions(opt.getId(),mapAutoView.getMapController()); } markerOptions.setGps(opt.isGps()) .position(new LonLatPoint(opt.getLongitude(), opt.getLatitude())) .anchor(opt.getU(), opt.getV()) - .icons(descriptors) + .icons(descriptors,mapAutoView.getMapController()) .period(opt.getPeriod()) .controlAngle(opt.isControlAngle()) .rotateAngle(opt.getRotate()) @@ -84,10 +85,10 @@ public class ObjectUtils { } else { BitmapDescriptor descriptor = getBitmapDescriptorFromMogo(opt.getIcon(), opt.getIconView()); if (descriptor != null) { - markerOptions.markerIcon(descriptor); + markerOptions.markerIcon(descriptor,mapAutoView.getMapController()); } if (opt.getIcon3DRes() != 0) { - markerOptions.marker3DIcon(opt.getIcon3DRes()); + markerOptions.marker3DIcon(opt.getIcon3DRes(),mapAutoView.getMapController()); } } String title = opt.getTitle(); @@ -170,11 +171,11 @@ public class ObjectUtils { return new MogoLatLng(point.getLatitude(), point.getLongitude()); } - public static PolylineOptions fromMogo(Polyline.Options options) { + public static PolylineOptions fromMogo(Polyline.Options options,MapAutoView mapAutoView) { if (options == null) { return null; } - PolylineOptions target = new PolylineOptions(); + PolylineOptions target = new PolylineOptions(mapAutoView.getMapController()); target.setGps(options.isUseGps()); if (options.getPoints() != null) { List points = new ArrayList<>(); @@ -193,15 +194,15 @@ public class ObjectUtils { target.useFacade(options.getUseFacade()); target.setVisible(options.isVisible()); if (options.getMaxIndex() >= 0f) { - target.maxIndex = options.getMaxIndex(); + target.maxIndex(options.getMaxIndex()); } if (options.getColors() != null) { target.colorValues(options.getColors()); } if (options.isLightOn()) { - target.isBright = true; - target.brightColor = options.getLightColor(); - target.brightSpeed = options.getLightSpeed(); + target.setIsBright(true); + target.setBrightColor(options.getLightColor()); + target.setBrightSpeed(options.getLightSpeed()); } return target; } @@ -223,23 +224,23 @@ public class ObjectUtils { CenterLine resultCenterLine = null; if (centerLine != null) { resultCenterLine = new CenterLine(); - resultCenterLine.setId(centerLine.id); - resultCenterLine.setLane_id(centerLine.lane_id); - resultCenterLine.setAngle(centerLine.angle); - resultCenterLine.setRoad_id(centerLine.road_id); - resultCenterLine.setTile_id(centerLine.tile_id); + resultCenterLine.setId(centerLine.getId()); + resultCenterLine.setLane_id(centerLine.getLane_id()); + resultCenterLine.setAngle(centerLine.getAngle()); + resultCenterLine.setRoad_id(centerLine.getRoad_id()); + resultCenterLine.setTile_id(centerLine.getTile_id()); ArrayList arrayList = new ArrayList<>(); - if (centerLine.points != null) { - for (com.zhidaoauto.map.sdk.open.query.LonLatPoint point : centerLine.points) { + if (centerLine.getPoints() != null) { + for (com.zhidaoauto.map.sdk.open.query.LonLatPoint point : centerLine.getPoints()) { com.mogo.eagle.core.data.map.LonLatPoint lonLatPoint = new com.mogo.eagle.core.data.map.LonLatPoint(); - lonLatPoint.setAltitude(point.altitude); - lonLatPoint.setAngle(point.angle); - lonLatPoint.setDistance(point.distance); - lonLatPoint.setLatitude(point.latitude); - lonLatPoint.setLongitude(point.longitude); - lonLatPoint.setProvider(point.provider); - lonLatPoint.setSpeed(point.speed); - lonLatPoint.setDuration(point.duration); + lonLatPoint.setAltitude(point.getAltitude()); + lonLatPoint.setAngle(point.getAngle()); + lonLatPoint.setDistance(point.getDistance()); + lonLatPoint.setLatitude(point.getLatitude()); + lonLatPoint.setLongitude(point.getLongitude()); + lonLatPoint.setProvider(point.getProvider()); + lonLatPoint.setSpeed(point.getSpeed()); + lonLatPoint.setDuration(point.getDuration()); arrayList.add(lonLatPoint); } resultCenterLine.setPoints(arrayList);