Commit fc1586ea authored by p x's avatar p x
Browse files

加入自实现的导航类

parent 42135beb
kotlin version: 2.0.21
error message: The daemon has terminated unexpectedly on startup attempt #1 with error code: 0. The daemon process output:
1. Kotlin compile daemon is ready
...@@ -14,13 +14,13 @@ ...@@ -14,13 +14,13 @@
tools:targetApi="31"> tools:targetApi="31">
<meta-data <!-- <meta-data-->
android:name="com.minedata.minenavi.apikey" <!-- android:name="com.minedata.minenavi.apikey"-->
android:value="57ac7a0d56494912a0c28e651fa4a40a" /> <!-- android:value="57ac7a0d56494912a0c28e651fa4a40a" />-->
<meta-data <!-- <meta-data-->
android:name="com.amap.api.v2.apikey" <!-- android:name="com.amap.api.v2.apikey"-->
android:value="3b7d009011b97dcc3815a93e8ddfcd77" /> <!-- android:value="3b7d009011b97dcc3815a93e8ddfcd77" />-->
<activity <activity
android:name=".ui.ShowCarOnlineActivity" android:name=".ui.ShowCarOnlineActivity"
......
...@@ -3,23 +3,16 @@ package com.sd.mapmultiengine ...@@ -3,23 +3,16 @@ package com.sd.mapmultiengine
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.sd.maplibrary.MAP_TYPE import com.sd.maplibrary.MAP_TYPE
import com.sd.maplibrary.MSDKInitializer import com.sd.maplibrary.MSDKInitializer
import com.sd.maplibrary.OnSdkInitCb import com.sd.maplibrary.OnSdkInitCb
import com.sd.mapmultiengine.adapter.DemoListAdapter import com.sd.mapmultiengine.adapter.DemoListAdapter
import com.sd.mapmultiengine.databinding.ActivityMainBinding import com.sd.mapmultiengine.databinding.ActivityMainBinding
import com.sd.mapmultiengine.ui.AMapWmsActivity
import com.sd.mapmultiengine.ui.CalculateDistanceActivity import com.sd.mapmultiengine.ui.CalculateDistanceActivity
import com.sd.mapmultiengine.ui.ChangeMapCenterAct import com.sd.mapmultiengine.ui.ChangeMapCenterAct
import com.sd.mapmultiengine.ui.DisplayMapActivity import com.sd.mapmultiengine.ui.DisplayMapActivity
import com.sd.mapmultiengine.ui.GestureDemo import com.sd.mapmultiengine.ui.GestureDemo
import com.sd.mapmultiengine.ui.ShowCarOnlineActivity
import com.sd.mapmultiengine.ui.ShowMyLocLandian import com.sd.mapmultiengine.ui.ShowMyLocLandian
import com.sd.mapmultiengine.ui.TCircelActivity import com.sd.mapmultiengine.ui.TCircelActivity
import com.sd.mapmultiengine.ui.TDriveRouteActivity import com.sd.mapmultiengine.ui.TDriveRouteActivity
...@@ -72,7 +65,7 @@ class MainActivity : AppCompatActivity() { ...@@ -72,7 +65,7 @@ class MainActivity : AppCompatActivity() {
DemoDetails("定位,获取我的位置", TGpsActivity::class.java), DemoDetails("定位,获取我的位置", TGpsActivity::class.java),
DemoDetails("驾车路线规划", TDriveRouteActivity::class.java), DemoDetails("驾车路线规划(导航)", TDriveRouteActivity::class.java),
// DemoDetails("业务相关", null), // DemoDetails("业务相关", null),
......
...@@ -16,6 +16,8 @@ class ShowMyLocLandian : AppCompatActivity() { ...@@ -16,6 +16,8 @@ class ShowMyLocLandian : AppCompatActivity() {
private lateinit var binding: ActivityShowMyLocLandianBinding private lateinit var binding: ActivityShowMyLocLandianBinding
var mapReadView: MapReadyView? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -27,7 +29,8 @@ class ShowMyLocLandian : AppCompatActivity() { ...@@ -27,7 +29,8 @@ class ShowMyLocLandian : AppCompatActivity() {
binding.mapMultiView.addMapRenderCallback(object : OnMapReadyLis { binding.mapMultiView.addMapRenderCallback(object : OnMapReadyLis {
override fun onMapReady(mapReadyView: MapReadyView) { override fun onMapReady(mapReadyView: MapReadyView) {
mapCoreApi.setLocationStyle(mapReadyView) this@ShowMyLocLandian.mapReadView=mapReadyView
mapCoreApi.setLocationStyle(this@ShowMyLocLandian.mapReadView)
} }
}) })
......
...@@ -30,8 +30,6 @@ class TDriveRouteActivity : AppCompatActivity() { ...@@ -30,8 +30,6 @@ class TDriveRouteActivity : AppCompatActivity() {
} }
}) })
//初始化并设置监听
// MSRoutePlans.addPlanLis(onDriveRoute)
//开始规划 //开始规划
binding.starplan.setOnClickListener { binding.starplan.setOnClickListener {
if (mapReadView == null) if (mapReadView == null)
...@@ -42,10 +40,10 @@ class TDriveRouteActivity : AppCompatActivity() { ...@@ -42,10 +40,10 @@ class TDriveRouteActivity : AppCompatActivity() {
val endPoint = MSLatLng(39.864311, 116.379311) val endPoint = MSLatLng(39.864311, 116.379311)
//// 终点名称 //// 终点名称
val endName = "沈阳火车站" val endName = "沈阳火车站"
var wayPoi = WayPoi().apply { var wayPoi = WayPoi(
passName = "鸟巢" passName = "鸟巢",
passPoint = MSLatLng(39.99300, 116.39524) passPoint = MSLatLng(39.99300, 116.39524)
} )
var ways = listOf<WayPoi>(wayPoi) var ways = listOf<WayPoi>(wayPoi)
//获取接口功能实例 //获取接口功能实例
...@@ -65,17 +63,39 @@ class TDriveRouteActivity : AppCompatActivity() { ...@@ -65,17 +63,39 @@ class TDriveRouteActivity : AppCompatActivity() {
// testDriverPlanaMAP() // testDriverPlanaMAP()
} }
} //开始导航
binding.starnai.setOnClickListener {
if (mapReadView == null)
return@setOnClickListener
//获取接口功能实例
var mapCoreApi = MapCoreApi.mapCoreApi
//算路结果回调 // 起点坐标 116.3215,39.8919
/* private var onDriveRoute = object : OnDriveRoute { val startPoint = MSLatLng(39.806898, 116.490682)
override fun onDriverRoute(driverRouteBean: DriverRouteBean) { //// 终点坐标116.3793,39.8643
MSRoutePlans.drawPlanPath( val endPoint = MSLatLng(39.864311, 116.379311)
mapReadView, //// 终点名称
driverRouteBean val endName = "沈阳火车站"
var wayPoi = WayPoi(
passName = "鸟巢",
passPoint = MSLatLng(39.99300, 116.39524)
) )
var ways = listOf<WayPoi>(wayPoi)
mapCoreApi.startNavi(mapReadView, 2, startPoint, "当前位置", endPoint, endName, ways)
} }
}*/
}
//算路结果回调
/* private var onDriveRoute = object : OnDriveRoute {
override fun onDriverRoute(driverRouteBean: DriverRouteBean) {
MSRoutePlans.drawPlanPath(
mapReadView,
driverRouteBean
)
}
}*/
} }
\ No newline at end of file
...@@ -38,12 +38,10 @@ class TLayersActivity : AppCompatActivity() { ...@@ -38,12 +38,10 @@ class TLayersActivity : AppCompatActivity() {
when (checkedId) { when (checkedId) {
R.id.rb1 -> {//普通 R.id.rb1 -> {//普通
mapCoreApi.toggleLayers(mapReadView, 1) mapCoreApi.toggleLayers(mapReadView, 1)
// MSLayers.changeLayers(mapReadView,1)
} }
R.id.rb2 -> {//卫星 R.id.rb2 -> {//卫星
mapCoreApi.toggleLayers(mapReadView, 2) mapCoreApi.toggleLayers(mapReadView, 2)
// MSLayers.changeLayers(mapReadView,2)
} }
} }
} }
......
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<com.sd.maplibrary.ui.MapMultiView <com.sd.maplibrary.ui.MapMultiView
android:id="@+id/mapMultiView" android:id="@+id/mapMultiView"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -9,14 +9,26 @@ ...@@ -9,14 +9,26 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="北京南站 - 沈阳火车站 途经点鸟巢"/> android:text="北京南站 - 沈阳火车站 途经点鸟巢" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/starplan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始规划" />
<Button
android:id="@+id/starnai"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始导航" />
</LinearLayout>
<Button
android:id="@+id/starplan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始规划" />
<com.sd.maplibrary.ui.MapMultiView <com.sd.maplibrary.ui.MapMultiView
android:id="@+id/mapMultiView" android:id="@+id/mapMultiView"
......
...@@ -3,6 +3,7 @@ plugins { ...@@ -3,6 +3,7 @@ plugins {
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
id("kotlin-kapt") id("kotlin-kapt")
// kotlin("jvm") version "2.1.10" // kotlin("jvm") version "2.1.10"
id("kotlin-parcelize")
id("org.jetbrains.dokka") version "2.0.0" id("org.jetbrains.dokka") version "2.0.0"
} }
...@@ -72,6 +73,7 @@ dependencies { ...@@ -72,6 +73,7 @@ dependencies {
implementation(libs.androidx.appcompat) implementation(libs.androidx.appcompat)
implementation(libs.material) implementation(libs.material)
implementation(libs.androidx.constraintlayout) implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.activity)
testImplementation(libs.junit) testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.espresso.core)
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<!-- 打开关闭sdcard的权限 --> <!-- 打开关闭sdcard的权限 -->
<uses-permission <uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
...@@ -29,27 +28,27 @@ ...@@ -29,27 +28,27 @@
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<application> <application>
<!-- android:supportsRtl="true">--> <!-- android:supportsRtl="true"> -->
<meta-data
<uses-library android:name="com.minedata.minenavi.apikey"
android:name="org.apache.http.legacy" android:value="57ac7a0d56494912a0c28e651fa4a40a" />
android:required="false" /> <meta-data
android:name="com.amap.api.v2.apikey"
<!-- <meta-data--> android:value="3b7d009011b97dcc3815a93e8ddfcd77" />
<!-- android:name="com.minedata.minenavi.apikey"-->
<!-- android:value="57ac7a0d56494912a0c28e651fa4a40a" />--> <uses-library
android:name="org.apache.http.legacy"
<!-- <meta-data--> android:required="false" /> <!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
<!-- android:name="com.amap.api.v2.apikey"--> <service android:name="com.amap.api.location.APSService" />
<!-- android:value="3b7d009011b97dcc3815a93e8ddfcd77" />-->
<!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
<service android:name="com.amap.api.location.APSService" />
<activity
android:name=".ui.MineNaiDirActivity"
android:exported="false"
android:screenOrientation="landscape" />
<activity <activity
android:name="com.amap.api.navi.AmapRouteActivity" android:name="com.amap.api.navi.AmapRouteActivity"
android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize|navigation"
android:configChanges="orientation|keyboardHidden|screenSize|navigation" /> android:theme="@android:style/Theme.NoTitleBar" />
</application> </application>
</manifest> </manifest>
\ No newline at end of file
package com.sd.maplibrary.bean package com.sd.maplibrary.bean
/**经纬度*/ import android.os.Parcelable
class MSLatLng { import kotlinx.parcelize.Parcelize
constructor(lat: Double, lng: Double) { /**经纬度*/
this.lat = lat @Parcelize
this.lng = lng data class MSLatLng
} (
var lat: Double = 0.0,
var lng: Double = 0.0
) : Parcelable
//{
// 纬度
var lat = 0.0
// 经度 // constructor(lat: Double, lng: Double) : this() {
var lng = 0.0 // this.lat = lat
} // this.lng = lng
\ No newline at end of file // }
//
// // 纬度
// var lat = 0.0
//
// // 经度
// var lng = 0.0
//}
\ No newline at end of file
package com.sd.maplibrary.bean package com.sd.maplibrary.bean
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
/**途经点Poi***/ /**途经点Poi***/
class WayPoi { @Parcelize
data class WayPoi(
/**途经点名坐标*/ /**途经点名坐标*/
var passPoint: MSLatLng? = null var passPoint: MSLatLng,
/**经点名字*/ /**经点名字*/
var passName: String
) : Parcelable
/*
{
*/
/**途经点名坐标*//*
var passPoint: MSLatLng? = null
*/
/**经点名字*//*
var passName = "" var passName = ""
} }*/
\ No newline at end of file
package com.sd.maplibrary.core.basic.amap
import com.amap.api.maps.model.Poi
import com.amap.api.navi.AmapNaviPage
import com.amap.api.navi.AmapNaviParams
import com.amap.api.navi.AmapNaviType
import com.amap.api.navi.AmapPageType
import com.sd.maplibrary.UserCtx
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.bean.WayPoi
import com.amap.api.maps.model.LatLng as ALatLng
/**
* 高德导航
*/
object AmapNai {
/**
* 直接开始导航
*
* @param starPoint
* @param startName
* @param endPoint
* @param endName
* @param ways
*/
fun startNavi(
starPoint: MSLatLng,
startName: String,
endPoint: MSLatLng,
endName: String,
ways: List<WayPoi>
) {
var context = UserCtx.instance.mContext
//途经点
var poiList = mutableListOf<Poi>()
if (ways.count() > 0) {
ways.forEach { wpoi ->
poiList.add(
Poi(
wpoi.passName,
ALatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng),
""
)
)
}
}
val params = AmapNaviParams(
Poi(startName, ALatLng(starPoint.lat, starPoint.lng), ""),
poiList,
Poi(endName, ALatLng(endPoint.lat, endPoint.lng), ""),
AmapNaviType.DRIVER, AmapPageType.NAVI
)
params.setUseInnerVoice(true)
AmapNaviPage.getInstance()
.showRouteActivity(context, params, null)
}
/**
* 展示路径规划
*
* @param starPoint
* @param startName
* @param endPoint
* @param endName
* @param ways
*/
fun startPlanNavi(
starPoint: MSLatLng,
startName: String,
endPoint: MSLatLng,
endName: String,
ways: List<WayPoi>
) {
var context = UserCtx.instance.mContext
//途经点
var poiList = mutableListOf<Poi>()
if (ways.count() > 0) {
ways.forEach { wpoi ->
poiList.add(
Poi(
wpoi.passName,
ALatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng),
""
)
)
}
}
val params = AmapNaviParams(
Poi(startName, ALatLng(starPoint.lat, starPoint.lng), ""),
poiList,
Poi(endName, ALatLng(endPoint.lat, endPoint.lng), ""),
AmapNaviType.DRIVER, AmapPageType.ROUTE
)
params.setUseInnerVoice(true)
AmapNaviPage.getInstance()
.showRouteActivity(context, params, null)
}
}
\ No newline at end of file
...@@ -3,12 +3,9 @@ package com.sd.maplibrary.core.basic.amap ...@@ -3,12 +3,9 @@ package com.sd.maplibrary.core.basic.amap
import com.amap.api.maps.CameraUpdateFactory import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.model.Poi import com.amap.api.maps.model.Poi
import com.amap.api.navi.AMapNavi import com.amap.api.navi.AMapNavi
import com.amap.api.navi.AmapNaviPage
import com.amap.api.navi.AmapNaviParams
import com.amap.api.navi.AmapNaviType
import com.amap.api.navi.AmapPageType
import com.amap.api.navi.model.AMapCalcRouteResult import com.amap.api.navi.model.AMapCalcRouteResult
import com.amap.api.navi.model.AMapNaviPath import com.amap.api.navi.model.AMapNaviPath
import com.amap.api.navi.model.NaviLatLng
import com.amap.api.navi.view.RouteOverLay import com.amap.api.navi.view.RouteOverLay
import com.sd.maplibrary.UserCtx import com.sd.maplibrary.UserCtx
import com.sd.maplibrary.bean.MSLatLng import com.sd.maplibrary.bean.MSLatLng
...@@ -19,7 +16,11 @@ import com.amap.api.maps.model.LatLng as ALatLng ...@@ -19,7 +16,11 @@ import com.amap.api.maps.model.LatLng as ALatLng
/**路劲规划**/ /**路劲规划**/
object AmapRoutePlans { class AmapRoutePlans {
companion object {
val instance: AmapRoutePlans by lazy { AmapRoutePlans() }
}
//初始化高德 导航 对象 //初始化高德 导航 对象
private var mAMapNavi: AMapNavi? = null private var mAMapNavi: AMapNavi? = null
...@@ -28,7 +29,7 @@ object AmapRoutePlans { ...@@ -28,7 +29,7 @@ object AmapRoutePlans {
private var routeOverlay: RouteOverLay? = null private var routeOverlay: RouteOverLay? = null
// private val routeOverlays: SparseArray<RouteOverLay> = SparseArray<RouteOverLay>() // private val routeOverlays: SparseArray<RouteOverLay> = SparseArray<RouteOverLay>()
// private var mapReadView: MapReadyView? = null private var mapReadView: MapReadyView? = null
/**驾车路径规划 /**驾车路径规划
...@@ -47,7 +48,7 @@ object AmapRoutePlans { ...@@ -47,7 +48,7 @@ object AmapRoutePlans {
ways: List<WayPoi>, ways: List<WayPoi>,
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
) { ) {
// this.mapReadView = mapReadView this.mapReadView = mapReadView
var context = UserCtx.instance.mContext var context = UserCtx.instance.mContext
mAMapNavi = AMapNavi.getInstance(context) mAMapNavi = AMapNavi.getInstance(context)
mAMapNavi!!.addAMapNaviListener(aMapNaviListener) mAMapNavi!!.addAMapNaviListener(aMapNaviListener)
...@@ -59,7 +60,7 @@ object AmapRoutePlans { ...@@ -59,7 +60,7 @@ object AmapRoutePlans {
ways.forEach { wpoi -> ways.forEach { wpoi ->
poiList.add( poiList.add(
Poi( Poi(
"鸟巢", wpoi.passName,
ALatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng), ALatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng),
"" ""
) )
...@@ -67,36 +68,28 @@ object AmapRoutePlans { ...@@ -67,36 +68,28 @@ object AmapRoutePlans {
} }
} }
val params = AmapNaviParams(
Poi(startName, ALatLng(starPoint.lat, starPoint.lng), ""),
poiList,
Poi(endName, ALatLng(endPoint.lat, endPoint.lng), ""),
AmapNaviType.DRIVER, AmapPageType.ROUTE
)
params.setUseInnerVoice(true)
AmapNaviPage.getInstance()
.showRouteActivity(context, params, null)
//这是路径规划 //这是路径规划
/* var startLatlng = NaviLatLng(starPoint.lat, starPoint.lng) var startLatlng = NaviLatLng(starPoint.lat, starPoint.lng)
var startList = listOf<NaviLatLng>(startLatlng) var startList = listOf<NaviLatLng>(startLatlng)
var endLatlng = NaviLatLng(endPoint.lat, endPoint.lng) var endLatlng = NaviLatLng(endPoint.lat, endPoint.lng)
var endList = listOf<NaviLatLng>(endLatlng) var endList = listOf<NaviLatLng>(endLatlng)
//途经点 //途经点
var wayPoints = mutableListOf<NaviLatLng>() var wayPoints = mutableListOf<NaviLatLng>()
if (ways.count() > 0) { if (ways.count() > 0) {
ways.forEach { wpoi -> ways.forEach { wpoi ->
wayPoints.add(NaviLatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng)) wayPoints.add(NaviLatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng))
} }
} }
var strategy = mAMapNavi?.strategyConvert(true, false, false, false, false)?:0;
mAMapNavi?.calculateDriveRoute(
startList, mAMapNavi?.calculateDriveRoute(
endList, startList,
wayPoints, endList,
PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT wayPoints,
)*/ strategy
// PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT
)
} }
...@@ -106,7 +99,6 @@ object AmapRoutePlans { ...@@ -106,7 +99,6 @@ object AmapRoutePlans {
* @param driverRB 包含路线信息的数据对象。 * @param driverRB 包含路线信息的数据对象。
*/ */
private fun drawPlanPath( private fun drawPlanPath(
mapReadView: MapReadyView?,
aMapCalcRouteResult: AMapCalcRouteResult? aMapCalcRouteResult: AMapCalcRouteResult?
) { ) {
if (aMapCalcRouteResult == null) if (aMapCalcRouteResult == null)
...@@ -147,10 +139,11 @@ object AmapRoutePlans { ...@@ -147,10 +139,11 @@ object AmapRoutePlans {
//-------------- 高德 导航监听 -------------------------- //-------------- 高德 导航监听 --------------------------
private var aMapNaviListener = object : MyAMapNaviListener() { private var aMapNaviListener = object : MyAMapNaviListener() {
override fun onCalculateRouteSuccess(aMapCalcRouteResult: AMapCalcRouteResult?) { override fun onCalculateRouteSuccess(aMapCalcRouteResult: AMapCalcRouteResult?) {
// 路线规划成功 // 路线规划成功
println("----------onCalculateRouteSuccess") println("----------onCalculateRouteSuccess")
drawPlanPath(aMapCalcRouteResult)
// mAMapNavi?.startNavi(NaviType.EMULATOR);
} }
override fun onCalculateRouteFailure(result: AMapCalcRouteResult?) { override fun onCalculateRouteFailure(result: AMapCalcRouteResult?) {
......
...@@ -6,12 +6,12 @@ import com.sd.maplibrary.core.basic.MSLocStyle ...@@ -6,12 +6,12 @@ import com.sd.maplibrary.core.basic.MSLocStyle
/** /**
* 显示定位小圆点 * 四维显示定位小圆点
*/ */
object MineLocationStyle { object MineLocationStyle {
// 四维初始化定位蓝点样式类 // 四维初始化定位蓝点样式类
private val myLocationStyle: MyLocationStyle by lazy { MyLocationStyle() } private val myLocationStyle by lazy { MyLocationStyle() }
/** /**
* 设置定位蓝点样式 * 设置定位蓝点样式
......
package com.sd.maplibrary.core.basic.mine
import android.content.Intent
import android.graphics.Point
import com.minedata.minenavi.map.MineMap
import com.minedata.minenavi.map.Model
import com.minedata.minenavi.map.ModelOptions
import com.minedata.minenavi.map.Overlay
import com.minedata.minenavi.mapdal.DataPreference
import com.minedata.minenavi.navi.GuidanceText
import com.minedata.minenavi.navi.NaviProgressData
import com.minedata.minenavi.navi.NaviSession
import com.minedata.minenavi.navi.NaviSessionData
import com.minedata.minenavi.navi.NaviSessionParams
import com.minedata.minenavi.navi.SmoothNaviData
import com.minedata.minenavi.navi.TmcSections
import com.minedata.minenavi.util.Tools
import com.sd.maplibrary.UserCtx
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.bean.WayPoi
import com.sd.maplibrary.core.MapReadyView
import com.sd.maplibrary.intfaces.MyMineNaviListener
import com.sd.maplibrary.intfaces.OnNaviPresenterListener
import com.sd.maplibrary.ui.MineNaiDirActivity
/**
* 四维导航
*/
object MineNai {
//初始化四维导航对象
private var mNaviSession: NaviSession? = null
// 导航小车
private var mMapCar: Model? = null
private var mMineMap: MineMap? = null
/**四维导航监听回调***/
var onNaviPresenterListener: OnNaviPresenterListener? = null
/**
* 开启四维导航 客户端自实现数据回调
*/
fun startNavi(mapReadView: MapReadyView?) {
mNaviSession = NaviSession.getInstance()
mNaviSession?.enableSound(true)
var naviSessionParams = NaviSessionParams().apply {
autoReroute = true
autoRemoveRoute = true
// useMineNaviGPS = true
}
var context = UserCtx.instance.mContext
mNaviSession!!.init(context, naviSessionParams)
mNaviSession?.setDataPreference(DataPreference.preferOnline)
mNaviSession?.addMineNaviListener(myMineNaviListener)
var mRouteBas = MineRoutePlans.mRouteBase
if (mRouteBas != null) {
mMineMap = mapReadView?.mMineMap
// drawNavingCar(MineRoutePlans.mStartPoint)
mNaviSession?.takeRoute(mRouteBas)
}
}
/**
* 直接跳转页面开启导航
*/
fun startNaviDirect(
starPoint: MSLatLng,
startName: String = "当前位置",
endPoint: MSLatLng,
endName: String = "",
ways: List<WayPoi>
) {
var params = MineNaiParams(starPoint, startName, endPoint, endName, ways)
var context = UserCtx.instance.mContext
var inten = Intent(context, MineNaiDirActivity::class.java)
inten.putExtra("mineNaiParams", params)
context?.startActivity(inten)
}
/**
* 添加导航小车
*/
fun drawNavingCar(point: Point) {
if (mMineMap == null) {
return
}
if (mMapCar == null) {
val modelOptions = ModelOptions() // 模型文件相对路径
.objFile("res/3d_car.obj") // 位置
.position(Tools.pointToLatLng(point)) // 图层布局类型
.layer(Overlay.Layer.aboveMarker) // 方向角
.heading(0f) // 保持尺寸的比例尺
.keepScaleSize(8.0f) // 缩放因子
.scaleFactor(0.15f) // 可见性
.visible(true)
mMapCar = mMineMap?.addModel(modelOptions)
}
}
/**
* 移除导航小车
*/
fun deleteNavingCar() {
if (mMineMap != null && mMapCar != null) {
mMineMap?.removeOverlay(mMapCar)
mMapCar!!.release()
mMapCar = null
}
}
//-------------- 四维 导航监听 --------------------------
/**
* 四维 导航监听
*/
private var myMineNaviListener = object : MyMineNaviListener() {
override fun onTracking(data: NaviSessionData) {
super.onTracking(data)
onNaviPresenterListener?.onTracking(data)
}
override fun onSmoothTracking(data: SmoothNaviData) {
super.onSmoothTracking(data)
onNaviPresenterListener?.onSmoothTracking(data)
}
override fun onDataUpdated(naviProgressData: NaviProgressData) {
super.onDataUpdated(naviProgressData)
onNaviPresenterListener?.onDataUpdated(naviProgressData)
}
override fun onTiBarUpdated(tmcSections: TmcSections) {
super.onTiBarUpdated(tmcSections)
onNaviPresenterListener?.onTiBarUpdated(tmcSections)
}
override fun onTextChanged(guidanceText: GuidanceText) {
super.onTextChanged(guidanceText)
onNaviPresenterListener?.onTextChanged(guidanceText)
}
override fun onDistanceChanged(distance: Int) {
super.onDistanceChanged(distance)
onNaviPresenterListener?.onDistanceChanged(distance)
}
override fun onArriveDestination() {
super.onArriveDestination()
onNaviPresenterListener?.onArriveDestination()
}
override fun onNaviEnded() {
super.onNaviEnded()
onNaviPresenterListener?.onNaviEnded()
}
}
}
\ No newline at end of file
package com.sd.maplibrary.core.basic.mine
import android.os.Parcelable
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.bean.WayPoi
import kotlinx.parcelize.Parcelize
/**
* 导航参数跳转
*/
@Parcelize
data class MineNaiParams(
val starPoint: MSLatLng,
val startName: String,
val endPoint: MSLatLng,
val endName: String,
val ways: List<WayPoi>
) : Parcelable
package com.sd.maplibrary.core.basic.mine package com.sd.maplibrary.core.basic.mine
import android.graphics.Point
import android.graphics.Rect import android.graphics.Rect
import com.minedata.minenavi.map.Route import com.minedata.minenavi.map.Route
import com.minedata.minenavi.map.RouteOptions import com.minedata.minenavi.map.RouteOptions
...@@ -41,10 +42,13 @@ object MineRoutePlans { ...@@ -41,10 +42,13 @@ object MineRoutePlans {
/** /**
* 四维保存当前算好的路线 * 四维保存当前算好的路线
*/ */
private var mRouteBase: RouteBase? = null var mRouteBase: RouteBase? = null
private var mapReadView: MapReadyView? = null private var mapReadView: MapReadyView? = null
/** 路径规划起点*/
var mStartPoint: Point = Point()
/**驾车路径规划 /**驾车路径规划
* @param starPoint 起点坐标 * @param starPoint 起点坐标
...@@ -67,21 +71,21 @@ object MineRoutePlans { ...@@ -67,21 +71,21 @@ object MineRoutePlans {
// this.onDriveRoute = onDriveRoute // this.onDriveRoute = onDriveRoute
this.mapReadView = mapReadView this.mapReadView = mapReadView
var context = UserCtx.instance.mContext // var context = UserCtx.instance.mContext
mNaviSession = NaviSession.getInstance() mNaviSession = NaviSession.getInstance()
// 开启语音播报 // 开启语音播报
mNaviSession?.enableSound(true) mNaviSession?.enableSound(true)
var naviSessionParams = NaviSessionParams().apply { /* var naviSessionParams = NaviSessionParams().apply {
autoReroute = true autoReroute = true
autoRemoveRoute = true autoRemoveRoute = true
// useMineNaviGPS = true // useMineNaviGPS = true
} }
mNaviSession!!.init(context, naviSessionParams) mNaviSession!!.init(context, naviSessionParams)*/
mNaviSession?.setDataPreference(DataPreference.preferOnline) mNaviSession?.setDataPreference(DataPreference.preferOnline)
mNaviSession?.addMineNaviListener(myMineNaviListener) mNaviSession?.addMineNaviListener(planiListener)
val starPoint = Tools.latLngToPoint(LatLng(starPoint.lat, starPoint.lng)) mStartPoint = Tools.latLngToPoint(LatLng(starPoint.lat, starPoint.lng))
val endPoint = Tools.latLngToPoint(LatLng(endPoint.lat, endPoint.lng)) val endPoint = Tools.latLngToPoint(LatLng(endPoint.lat, endPoint.lng))
var startName = startName var startName = startName
var endName = endName var endName = endName
...@@ -98,7 +102,7 @@ object MineRoutePlans { ...@@ -98,7 +102,7 @@ object MineRoutePlans {
routePlan.setTransportationType(RoutePlan.TransportationType.car) routePlan.setTransportationType(RoutePlan.TransportationType.car)
mNaviSession?.calculateDriveRoute( mNaviSession?.calculateDriveRoute(
PoiFavorite(starPoint, startName), PoiFavorite(mStartPoint, startName),
wayPoints, wayPoints,
PoiFavorite(endPoint, endName), PoiFavorite(endPoint, endName),
routePlan, routePlan,
...@@ -115,6 +119,8 @@ object MineRoutePlans { ...@@ -115,6 +119,8 @@ object MineRoutePlans {
private fun drawPlanPath( private fun drawPlanPath(
routeBase: RouteBase? routeBase: RouteBase?
) { ) {
if (routeBase == null)
return
// 移除旧的路线覆盖物 // 移除旧的路线覆盖物
if (mRoute != null) { if (mRoute != null) {
mapReadView?.mMineMap?.removeOverlay(mRoute) mapReadView?.mMineMap?.removeOverlay(mRoute)
...@@ -145,7 +151,7 @@ object MineRoutePlans { ...@@ -145,7 +151,7 @@ object MineRoutePlans {
/**将指定的地图上的矩形区域显示到指定的屏幕矩形区域中 /**将指定的地图上的矩形区域显示到指定的屏幕矩形区域中
* @param mRouteBase 路线数据 * @param mRouteBase 路线数据
*/ */
private fun navEndFitWorldAreaToRect(mapReadView: MapReadyView?, mRouteBase: RouteBase?) { private fun navEndFitWorldAreaToRect(mapReadView: MapReadyView?, mRouteBase: RouteBase?) {
if (mRouteBase == null) if (mRouteBase == null)
return return
val rect = Rect( val rect = Rect(
...@@ -159,14 +165,14 @@ object MineRoutePlans { ...@@ -159,14 +165,14 @@ object MineRoutePlans {
} }
/**自定义驾车路线返回*/ // /**自定义驾车路线返回*/
interface OnDriveRoute { // interface OnDriveRoute {
fun onDriverRoute(any: Any) // fun onDriverRoute(any: Any)
} // }
//-------------- 四维 导航监听 -------------------------- //-------------- 四维 导航监听 --------------------------
private var myMineNaviListener = object : MyMineNaviListener() { private var planiListener = object : MyMineNaviListener() {
private fun getRouteMsg(data: RouterErrorInfo): String { private fun getRouteMsg(data: RouterErrorInfo): String {
var msg = "" var msg = ""
......
...@@ -17,6 +17,7 @@ abstract class AbsMapCore : IMapBasic, IMapBusin { ...@@ -17,6 +17,7 @@ abstract class AbsMapCore : IMapBasic, IMapBusin {
/**业务接口实现抽象**/ /**业务接口实现抽象**/
var iMapBusin = MapFactory.createBusin() var iMapBusin = MapFactory.createBusin()
//-------------------------基础接口实现抽象----------------------------------
override fun toggleLayers(mapReadView: MapReadyView?, type: Int) { override fun toggleLayers(mapReadView: MapReadyView?, type: Int) {
iMapBasic.toggleLayers(mapReadView, type) iMapBasic.toggleLayers(mapReadView, type)
} }
...@@ -137,4 +138,21 @@ abstract class AbsMapCore : IMapBasic, IMapBusin { ...@@ -137,4 +138,21 @@ abstract class AbsMapCore : IMapBasic, IMapBusin {
) { ) {
iMapBasic.drivingPathPlanning(starPoint, startName, endPoint, endName, ways, mapReadView) iMapBasic.drivingPathPlanning(starPoint, startName, endPoint, endName, ways, mapReadView)
} }
override fun startNavi(
mapReadView: MapReadyView?,
navType: Int,
starPoint: MSLatLng,
startName: String,
endPoint: MSLatLng,
endName: String,
ways: List<WayPoi>
) {
iMapBasic.startNavi(mapReadView, navType, starPoint, startName, endPoint, endName, ways)
}
//-------------------------基础接口实现抽象----------------------------------
} }
\ No newline at end of file
...@@ -12,6 +12,7 @@ import com.sd.maplibrary.core.basic.amap.AmapGestures ...@@ -12,6 +12,7 @@ import com.sd.maplibrary.core.basic.amap.AmapGestures
import com.sd.maplibrary.core.basic.amap.AmapGpsLocation import com.sd.maplibrary.core.basic.amap.AmapGpsLocation
import com.sd.maplibrary.core.basic.amap.AmapLocationStyle import com.sd.maplibrary.core.basic.amap.AmapLocationStyle
import com.sd.maplibrary.core.basic.amap.AmapMethodAdv import com.sd.maplibrary.core.basic.amap.AmapMethodAdv
import com.sd.maplibrary.core.basic.amap.AmapNai
import com.sd.maplibrary.core.basic.amap.AmapPoiSearch import com.sd.maplibrary.core.basic.amap.AmapPoiSearch
import com.sd.maplibrary.core.basic.amap.AmapRoutePlans import com.sd.maplibrary.core.basic.amap.AmapRoutePlans
import com.sd.maplibrary.core.basic.amap.AmapToggleLayers import com.sd.maplibrary.core.basic.amap.AmapToggleLayers
...@@ -153,7 +154,7 @@ class AmapBasic : IMapBasic { ...@@ -153,7 +154,7 @@ class AmapBasic : IMapBasic {
ways: List<WayPoi>, ways: List<WayPoi>,
mapReadView: MapReadyView? mapReadView: MapReadyView?
) { ) {
AmapRoutePlans.drivingPathPlanning( AmapRoutePlans.instance.drivingPathPlanning(
starPoint, starPoint,
startName, startName,
endPoint, endPoint,
...@@ -163,6 +164,23 @@ class AmapBasic : IMapBasic { ...@@ -163,6 +164,23 @@ class AmapBasic : IMapBasic {
) )
} }
override fun startNavi(
mapReadView: MapReadyView?,
navType: Int,
starPoint: MSLatLng,
startName: String,
endPoint: MSLatLng,
endName: String,
ways: List<WayPoi>
) {
if (navType == 1) {
// throw NoSuchMethodException("高德导航暂不支持自己实现回调")
AmapNai.startPlanNavi(starPoint, startName, endPoint, endName, ways)
} else if (navType == 2) {
AmapNai.startNavi(starPoint, startName, endPoint, endName, ways)
}
}
companion object { companion object {
val amapBasic: AmapBasic by lazy { AmapBasic() } val amapBasic: AmapBasic by lazy { AmapBasic() }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment