Commit 6b587c56 authored by p x's avatar p x
Browse files

实现UML设计

parent f8483b51
......@@ -135,7 +135,7 @@ class MainActivity : AppCompatActivity() {
*
* @param type MINE=四维 AMAP=高德
*/
fun initMap(type: MAP_TYPE = MAP_TYPE.AMAP) {
fun initMap(type: MAP_TYPE = MAP_TYPE.MINE) {
MSDKInitializer.initializeMap(this, type, object : OnSdkInitCb {
override fun onInitSuccess() {
println("--------onMapInitSuccess")
......
......@@ -27,14 +27,13 @@ import com.minedata.minenavi.navi.RouterErrorInfo
import com.minedata.minenavi.navi.SmoothNaviData
import com.minedata.minenavi.navi.TmcSections
import com.minedata.minenavi.util.Tools
import com.sd.maplibrary.MAP_TYPE
import com.sd.maplibrary.MSDKInitializer
import com.sd.maplibrary.bean.DriverRouteBean
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.bean.WayPoi
import com.sd.maplibrary.core.MSRoutePlans
import com.sd.maplibrary.core.MSRoutePlans.OnDriveRoute
//import com.sd.maplibrary.core.MSRoutePlans
//import com.sd.maplibrary.core.MSRoutePlans.OnDriveRoute
import com.sd.maplibrary.core.MapReadyView
import com.sd.maplibrary.factorys.MapFactory
import com.sd.maplibrary.ui.MapMultiView.OnMapReadyLis
import com.sd.mapmultiengine.databinding.ActivityTdriveRouteBinding
import com.amap.api.services.core.LatLonPoint as ALatLonPoint
......@@ -59,7 +58,7 @@ class TDriveRouteActivity : AppCompatActivity() {
})
//初始化并设置监听
MSRoutePlans.addPlanLis(onDriveRoute)
// MSRoutePlans.addPlanLis(onDriveRoute)
//开始规划
binding.starplan.setOnClickListener {
if (mapReadView == null)
......@@ -75,8 +74,19 @@ class TDriveRouteActivity : AppCompatActivity() {
passPoint = MSLatLng(39.99300, 116.39524)
}
var ways = listOf<WayPoi>(wayPoi)
//获取基础功能实例
var basicMap = MapFactory.createBasic()
//开始路径规划
MSRoutePlans.drivingPathPlanning(startPoint, endPoint, ways, endName)
basicMap.drivingPathPlanning(
startPoint,
"当前位置",
endPoint,
endName,
ways,
mapReadView
)
// MSRoutePlans.drivingPathPlanning(startPoint, endPoint, ways, endName)
// testDriverPlan()
// testDriverPlanaMAP()
......@@ -85,244 +95,14 @@ class TDriveRouteActivity : AppCompatActivity() {
}
//算路结果回调
private var onDriveRoute = object : OnDriveRoute {
/* private var onDriveRoute = object : OnDriveRoute {
override fun onDriverRoute(driverRouteBean: DriverRouteBean) {
MSRoutePlans.drawPlanPath(
mapReadView,
driverRouteBean
)
}
}
private fun setRouteOverlayStyle(route: Route?, isSmallMapRoute: Boolean) {
var routeStyle = "DEFAULT"
if (isSmallMapRoute) {
routeStyle += ",small-map"
}
route?.selectStyleClass(routeStyle)
}
lateinit var mNaviSession: NaviSession
private fun testDriverPlan() {
mNaviSession = NaviSession.getInstance()
mNaviSession.enableSound(true)
// mNaviSession.setDataPreference(DataPreference.preferOnline)
mNaviSession.addMineNaviListener(mineNaviListener)
// 起点名称
val startName = ""
var mStartPoint = Tools.latLngToPoint(LatLng(41.8194611, 123.4358811))
// 终点名称
val endName = "北京奥利匹克公园"
var mEndPoint = Tools.latLngToPoint(LatLng(39.9923712, 116.392522))
val newstartPoint = PoiFavorite(mStartPoint, startName)
val newendPoint = PoiFavorite(mEndPoint, endName)
val wayPoints = ArrayList<PoiFavorite>()
val routePlan = RoutePlan()
// 设置算路偏好
routePlan.setRoutePreference(RoutePlan.RoutePreference.none)
// crp 算路
routePlan.setRouteServerType(RoutePlan.RouteServiceType.crp)
mNaviSession.calculateDriveRoute(
newstartPoint,
wayPoints,
newendPoint,
routePlan,
NaviSession.RouteMethod.multipleResult
)
}
var mineNaviListener = object : MineNaviListener {
override fun onCalculateRouteSuccess(p0: RouteCollection?) {
var a = 0
println("---算路成功")
}
override fun onCalculateBusSuccess(p0: List<BusRoute?>?) {
}
override fun onCalculateRouteFailed(p0: RouterErrorInfo?) {
var b = 0
println("---算路失败 p0?.errCode = ${p0?.errCode}")
}
override fun onCalculateVrpSuccess(p0: List<PoiFavorite?>?) {
}
override fun onArriveDestination() {
}
override fun onWayPointArrived(p0: Int) {
}
override fun onNewArrow(p0: ArrowInfo?) {
}
override fun onDeleteArrow() {
}
override fun onNewRouteTaken(data: RouteBase?) {
}
override fun onRouteRemoved() {
}
override fun onNeedsReroute() {
}
override fun onRerouteCancelled() {
}
override fun onRerouteComplete(p0: RouteBase?) {
}
override fun onRerouteFailed(p0: RouterErrorInfo?) {
}
override fun onRerouteStarted() {
}
override fun onRouteCancelled() {
}
override fun onRouteStarted() {
}
override fun onRouting() {
}
override fun onNaviBegin(data: RouteBase?) {
}
override fun onNaviEnded() {
}
override fun onSimNaviBegin(data: RouteBase?) {
}
override fun onSimNaviPaused(data: RouteBase?) {
}
override fun onSimNaviResumed(data: RouteBase?) {
}
override fun onSimNaviEnd(data: RouteBase?) {
}
override fun onTracking(p0: NaviSessionData?) {
}
override fun onSmoothTracking(p0: SmoothNaviData?) {
}
override fun onDataUpdated(p0: NaviProgressData?) {
}
override fun onTextChanged(p0: GuidanceText?) {
}
override fun onDistanceChanged(p0: Int) {
}
override fun onTiBarUpdated(p0: TmcSections?) {
}
override fun onRouteTmcUpdated(p0: RouteBase?) {
}
override fun onRouteTeUpdated(p0: RouteBase?) {
}
override fun onRouteBriefRequestSucceeded(p0: RouteBriefQuerier.RouteBrief?) {
}
override fun onRouteBriefRequestFailed(p0: Int, p1: String?) {
}
override fun onRouteBriefRequestCancelled() {
}
};
private var mStartPoint = ALatLonPoint(39.942295, 116.335891) //起点,39.942295,116.335891
private var mEndPoint = ALatLonPoint(39.995576, 116.481288) //终点,39.995576,116.481288
private fun testDriverPlanaMAP() {
var mRouteSearch = RouteSearch(this)
mRouteSearch.setRouteSearchListener(ppp);
val fromAndTo = RouteSearch.FromAndTo(
mStartPoint, mEndPoint
)
val query = DriveRouteQuery(
fromAndTo, RouteSearch.DrivingDefault, null,
null, ""
) // 第一个参数表示路径规划的起点和终点,第二个参数表示驾车模式,第三个参数表示途经点,第四个参数表示避让区域,第五个参数表示避让道路
mRouteSearch.calculateDriveRouteAsyn(query) // 异步路径规划驾车模式查询
}
private var ppp = object : OnRouteSearchListener {
override fun onBusRouteSearched(
p0: BusRouteResult?,
p1: Int
) {
}
override fun onDriveRouteSearched(
p0: DriveRouteResult?,
p1: Int
) {
println(" ---高德成功")
}
override fun onWalkRouteSearched(
p0: WalkRouteResult?,
p1: Int
) {
}
override fun onRideRouteSearched(
p0: RideRouteResult?,
p1: Int
) {
}
}
}*/
}
\ No newline at end of file
......@@ -3,9 +3,8 @@ package com.sd.mapmultiengine.ui
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.sd.maplibrary.core.MSLayers
import com.sd.maplibrary.core.MSMethodAdv
import com.sd.maplibrary.core.MapReadyView
import com.sd.maplibrary.factorys.MapFactory
import com.sd.maplibrary.ui.MapMultiView.OnMapReadyLis
import com.sd.mapmultiengine.R
import com.sd.mapmultiengine.databinding.ActivityTlayersBinding
......@@ -32,13 +31,19 @@ class TLayersActivity : AppCompatActivity() {
}
})
//获取基础功能实例
var basicMap = MapFactory.createBasic()
binding.rg.setOnCheckedChangeListener { group, checkedId ->
when (checkedId) {
R.id.rb1 -> {//普通
MSLayers.changeLayers(mapReadView,1)
basicMap.toggleLayers(mapReadView, 1)
// MSLayers.changeLayers(mapReadView,1)
}
R.id.rb2 -> {//卫星
MSLayers.changeLayers(mapReadView,2)
basicMap.toggleLayers(mapReadView, 2)
// MSLayers.changeLayers(mapReadView,2)
}
}
}
......
......@@ -10,4 +10,16 @@ plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.android.library) apply false
}
\ No newline at end of file
}
//tasks.register<Jar>("dokkaHtmlJar") {
// dependsOn(tasks.dokkaHtml)
// from(tasks.dokkaHtml.flatMap { it.outputDirectory })
// archiveClassifier.set("html-docs")
//}
//
//tasks.register<Jar>("dokkaJavadocJar") {
// dependsOn(tasks.dokkaJavadoc)
// from(tasks.dokkaJavadoc.flatMap { it.outputDirectory })
// archiveClassifier.set("javadoc")
//}
\ No newline at end of file
......@@ -24,4 +24,4 @@ android.nonTransitiveRClass=true
#android.defaults.buildfeatures.databinding=true
#????gradle??????????DGP v2:
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
#org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
\ No newline at end of file
org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
\ No newline at end of file
......@@ -40,9 +40,10 @@ android {
}
// dokka {
// outputFormat = 'javadoc'
// outputDirectory = "$buildDir/dokka"
//
// configuration {
// // Do not output deprecated members
// skipDeprecated = true
......@@ -75,7 +76,10 @@ dependencies {
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
//文档插件库
// implementation(libs.android.documentation.plugin)
// Is applied universally
// dokkaPlugin("org.jetbrains.dokka:mathjax-plugin:2.0.0")
// Is applied for the single-module dokkaHtml task only
// dokkaHtmlPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:2.0.0")
//高德
// implementation("com.amap.api:navi-3dmap:latest.integration")
// implementation("com.amap.api:search:latest.integration")
......
......@@ -12,7 +12,7 @@ class DriverRouteBean {
val instance: DriverRouteBean by lazy { DriverRouteBean() }
}
//四维
/**四维路径规划返回*/
var routeCollection: RouteCollection? = null
//高德
......
package com.sd.maplibrary.core
import android.content.Context
import android.graphics.Rect
import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.model.Poi
......@@ -9,10 +8,8 @@ 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.enums.PathPlanningStrategy
import com.amap.api.navi.model.AMapCalcRouteResult
import com.amap.api.navi.model.AMapNaviPath
import com.amap.api.navi.model.NaviLatLng
import com.amap.api.navi.view.RouteOverLay
import com.minedata.minenavi.map.Route
import com.minedata.minenavi.map.RouteOptions
......@@ -38,7 +35,11 @@ import com.sd.maplibrary.utils.DisplayUtil
import com.amap.api.maps.model.LatLng as ALatLng
/****路劲规划***/
/**路劲规划 弃用**/
@Deprecated(
message = "弃用 直接使用var basicMap = MapFactory.createBasic()\n" +
" basicMap.drivingPathPlanning()"
)
object MSRoutePlans {
//初始化高德 RouteSearch 对象
// private var mRouteSearch: RouteSearch? = null
......@@ -74,7 +75,7 @@ object MSRoutePlans {
* @param onDriveRoute 导航路线回调接口
*/
fun addPlanLis(onDriveRoute: OnDriveRoute) {
var context= UserCtx.instance.mContext
var context = UserCtx.instance.mContext
this.onDriveRoute = onDriveRoute
// 根据地图类型初始化不同的导航引擎
......@@ -149,44 +150,50 @@ object MSRoutePlans {
MAP_TYPE.AMAP -> {
//这是路径规划
var startLatlng = NaviLatLng(starPoint.lat, starPoint.lng)
var startList = listOf<NaviLatLng>(startLatlng)
/* var startLatlng = NaviLatLng(starPoint.lat, starPoint.lng)
var startList = listOf<NaviLatLng>(startLatlng)
var endLatlng = NaviLatLng(endPoint.lat, endPoint.lng)
var endList = listOf<NaviLatLng>(endLatlng)
//途经点
var wayPoints = mutableListOf<NaviLatLng>()
if (ways.count() > 0) {
ways.forEach { wpoi ->
wayPoints.add(NaviLatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng))
}
}
mAMapNavi?.calculateDriveRoute(
startList,
endList,
wayPoints,
PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT
)*/
var endLatlng = NaviLatLng(endPoint.lat, endPoint.lng)
var endList = listOf<NaviLatLng>(endLatlng)
//这是导航,直接到高德内置组件
//途经点
var wayPoints = mutableListOf<NaviLatLng>()
var poiList = mutableListOf<Poi>()
if (ways.count() > 0) {
ways.forEach { wpoi ->
wayPoints.add(NaviLatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng))
poiList.add(
Poi(
"鸟巢",
ALatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng),
""
)
)
}
}
mAMapNavi?.calculateDriveRoute(
startList,
endList,
wayPoints,
PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT
val params = AmapNaviParams(
Poi(startName, ALatLng(starPoint.lat, starPoint.lng), ""),
poiList,
Poi(endName, ALatLng(endPoint.lat, endPoint.lng), ""),
AmapNaviType.DRIVER, AmapPageType.ROUTE
)
//这是导航,直接到高德内置组件
//途经点
/* var poiList = mutableListOf<Poi>()
if (ways.count() > 0) {
ways.forEach { wpoi ->
poiList.add(Poi("鸟巢", 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)*/
params.setUseInnerVoice(true)
AmapNaviPage.getInstance()
.showRouteActivity(context, params, null)
}
}
}
......@@ -197,57 +204,57 @@ object MSRoutePlans {
}
/**
* 绘制规划的路线路径。
* @param mapReadView 地图视图容器,用于获取当前地图实例。
* @param driverRB 包含路线信息的数据对象。
*/
fun drawPlanPath(
mapReadView: MapReadyView?,
driverRB: DriverRouteBean
) {
var context = UserCtx.instance.mContext
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
// 移除旧的路线覆盖物
if (mRoute != null) {
mapReadView?.mMineMap?.removeOverlay(mRoute)
mRoute = null
}
// 获取第一条路线数据并设置路线绘制选项
var routeBase = driverRB.routeCollection?.routes?.get(0)
val options = RouteOptions()
.routeBase(routeBase)
.colorType(Route.RouteColorType.enrouteTi)
.styleClass("DEFAULT")
// 添加新的路线到地图上,并设置样式和视角适配
mRoute = mapReadView?.mMineMap?.addRoute(options)
setRouteOverlayStyle(mRoute, false)
navEndFitWorldAreaToRect(mapReadView, routeBase)
}
/**
* 绘制规划的路线路径。
* @param mapReadView 地图视图容器,用于获取当前地图实例。
* @param driverRB 包含路线信息的数据对象。
*/
fun drawPlanPath(
mapReadView: MapReadyView?,
driverRB: DriverRouteBean
) {
var context = UserCtx.instance.mContext
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
// 移除旧的路线覆盖物
if (mRoute != null) {
mapReadView?.mMineMap?.removeOverlay(mRoute)
mRoute = null
}
MAP_TYPE.AMAP -> {
// 清除之前的路线覆盖物
if (routeOverlay != null) {
routeOverlay?.removeFromMap()
routeOverlay = null
// 获取第一条路线数据并设置路线绘制选项
var routeBase = driverRB.routeCollection?.routes?.get(0)
val options = RouteOptions()
.routeBase(routeBase)
.colorType(Route.RouteColorType.enrouteTi)
.styleClass("DEFAULT")
// 添加新的路线到地图上,并设置样式和视角适配
mRoute = mapReadView?.mMineMap?.addRoute(options)
setRouteOverlayStyle(mRoute, false)
navEndFitWorldAreaToRect(mapReadView, routeBase)
}
// 从导航结果中获取路径信息并在高德地图上绘制
val routeIds = driverRB.aMapCalcRouteResult!!.getRouteid()
val paths: HashMap<Int, AMapNaviPath> = mAMapNavi!!.getNaviPaths()
val path: AMapNaviPath? = paths.get(routeIds[0])
if (path != null) {
mapReadView?.aMap?.moveCamera(CameraUpdateFactory.changeTilt(0f))
routeOverlay = RouteOverLay(mapReadView?.aMap, path, context)
routeOverlay?.setTrafficLine(false)
routeOverlay?.addToMap()
MAP_TYPE.AMAP -> {
// 清除之前的路线覆盖物
if (routeOverlay != null) {
routeOverlay?.removeFromMap()
routeOverlay = null
}
// 从导航结果中获取路径信息并在高德地图上绘制
val routeIds = driverRB.aMapCalcRouteResult!!.getRouteid()
val paths: HashMap<Int, AMapNaviPath> = mAMapNavi!!.getNaviPaths()
val path: AMapNaviPath? = paths.get(routeIds[0])
if (path != null) {
mapReadView?.aMap?.moveCamera(CameraUpdateFactory.changeTilt(0f))
routeOverlay = RouteOverLay(mapReadView?.aMap, path, context)
routeOverlay?.setTrafficLine(false)
routeOverlay?.addToMap()
}
}
}
}
}
// private fun drawRoutes(
......
......@@ -2,9 +2,6 @@ package com.sd.maplibrary.core
import android.content.Context
import android.util.Log
import androidx.lifecycle.viewModelScope
import com.amap.api.maps.AMapUtils
import com.amap.api.maps.model.LatLng as ALatLng
import com.minedata.minenavi.map.Model
import com.minedata.minenavi.map.ModelOptions
import com.minedata.minenavi.map.Overlay
......@@ -13,7 +10,7 @@ import com.sd.maplibrary.MAP_TYPE
import com.sd.maplibrary.MSDKInitializer
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.utils.SmoothMoveUtils
import com.sd.shupathwebview.utils.FileIoUtils
import com.sd.maplibrary.utils.FileIoUtils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
......
package com.sd.maplibrary.core.basic.amap
import com.amap.api.maps.CameraUpdateFactory
import com.amap.api.maps.model.Poi
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.AMapNaviPath
import com.amap.api.navi.view.RouteOverLay
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.MyAMapNaviListener
import com.amap.api.maps.model.LatLng as ALatLng
/**路劲规划**/
object AmapRoutePlans {
//初始化高德 导航 对象
private var mAMapNavi: AMapNavi? = null
//高德保存当前算好的路线
private var routeOverlay: RouteOverLay? = null
// private val routeOverlays: SparseArray<RouteOverLay> = SparseArray<RouteOverLay>()
// private var mapReadView: MapReadyView? = null
/**驾车路径规划
* @param starPoint 起点坐标
* @param startName 起点名称
* @param endPoint 终点坐标
* @param endName 终点名称(高德可不传)
* @param ways 途经点集合
* @param mapReadView 地图对象
*/
fun drivingPathPlanning(
starPoint: MSLatLng,
startName: String = "当前位置",
endPoint: MSLatLng,
endName: String = "",
ways: List<WayPoi>,
mapReadView: MapReadyView?,
) {
// this.mapReadView = mapReadView
var context = UserCtx.instance.mContext
mAMapNavi = AMapNavi.getInstance(context)
mAMapNavi!!.addAMapNaviListener(aMapNaviListener)
//这是导航,直接到高德内置组件
//途经点
var poiList = mutableListOf<Poi>()
if (ways.count() > 0) {
ways.forEach { wpoi ->
poiList.add(
Poi(
"鸟巢",
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)
//这是路径规划
/* var startLatlng = NaviLatLng(starPoint.lat, starPoint.lng)
var startList = listOf<NaviLatLng>(startLatlng)
var endLatlng = NaviLatLng(endPoint.lat, endPoint.lng)
var endList = listOf<NaviLatLng>(endLatlng)
//途经点
var wayPoints = mutableListOf<NaviLatLng>()
if (ways.count() > 0) {
ways.forEach { wpoi ->
wayPoints.add(NaviLatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng))
}
}
mAMapNavi?.calculateDriveRoute(
startList,
endList,
wayPoints,
PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT
)*/
}
/**
* 绘制规划的路线路径。
* @param mapReadView 地图视图容器,用于获取当前地图实例。
* @param driverRB 包含路线信息的数据对象。
*/
private fun drawPlanPath(
mapReadView: MapReadyView?,
aMapCalcRouteResult: AMapCalcRouteResult?
) {
if (aMapCalcRouteResult == null)
return
var context = UserCtx.instance.mContext
// 清除之前的路线覆盖物
if (routeOverlay != null) {
routeOverlay?.removeFromMap()
routeOverlay = null
}
// 从导航结果中获取路径信息并在高德地图上绘制
val routeIds = aMapCalcRouteResult!!.getRouteid()
val paths: HashMap<Int, AMapNaviPath> = mAMapNavi!!.getNaviPaths()
val path: AMapNaviPath? = paths.get(routeIds[0])
if (path != null) {
mapReadView?.aMap?.moveCamera(CameraUpdateFactory.changeTilt(0f))
routeOverlay = RouteOverLay(mapReadView?.aMap, path, context)
routeOverlay?.setTrafficLine(false)
routeOverlay?.addToMap()
}
}
// private fun drawRoutes(
// routeId: Int,
// path: AMapNaviPath,
// mapReadView: MapReadyView?,
// context: Context
// ) {
// mapReadView?.aMap?.moveCamera(CameraUpdateFactory.changeTilt(0f))
// routeOverLay = RouteOverLay(mapReadView?.aMap, path, context)
// routeOverLay.setTrafficLine(false)
// routeOverLay.addToMap()
//// routeOverlays.put(routeId, routeOverLay)
// }
//-------------- 高德 导航监听 --------------------------
private var aMapNaviListener = object : MyAMapNaviListener() {
override fun onCalculateRouteSuccess(aMapCalcRouteResult: AMapCalcRouteResult?) {
// 路线规划成功
println("----------onCalculateRouteSuccess")
}
override fun onCalculateRouteFailure(result: AMapCalcRouteResult?) {
}
}
}
\ No newline at end of file
package com.sd.maplibrary.core.basic.amap
import com.amap.api.maps.AMap
import com.sd.maplibrary.core.MapReadyView
/**
*高德切换底图图层
*/
object AmapToggleLayers {
fun toggleLayers(mapReadView: MapReadyView?, type: Int) {
when (type) {
1 -> {
mapReadView?.aMap?.setMapType(AMap.MAP_TYPE_NORMAL)
}
2 -> {
mapReadView?.aMap?.setMapType(AMap.MAP_TYPE_SATELLITE)
}
}
}
}
\ No newline at end of file
package com.sd.maplibrary.core.basic.mine
import android.graphics.Rect
import com.minedata.minenavi.map.Route
import com.minedata.minenavi.map.RouteOptions
import com.minedata.minenavi.mapdal.DataPreference
import com.minedata.minenavi.mapdal.LatLng
import com.minedata.minenavi.mapdal.PoiFavorite
import com.minedata.minenavi.navi.NaviSession
import com.minedata.minenavi.navi.NaviSessionParams
import com.minedata.minenavi.navi.RouteBase
import com.minedata.minenavi.navi.RouteCollection
import com.minedata.minenavi.navi.RoutePlan
import com.minedata.minenavi.navi.RouterErrorInfo
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.utils.DisplayUtil
/**四维路劲规划*/
object MineRoutePlans {
//初始化四维导航对象
private var mNaviSession: NaviSession? = null
//驾车算路回调对象
// private var driverRouteBean = DriverRouteBean.instance
//驾车路径规划回调接口
// private var onDriveRoute: OnDriveRoute? = null
/**
* 路线图层
*/
private var mRoute: Route? = null
/**
* 四维保存当前算好的路线
*/
private var mRouteBase: RouteBase? = null
private var mapReadView: MapReadyView? = null
/**驾车路径规划
* @param starPoint 起点坐标
* @param startName 起点名称
* @param endPoint 终点坐标
* @param endName 终点名称(高德可不传)
* @param ways 途经点集合
* @param mapReadView 地图对象
* @param onDriveRoute 路径规划结果回调
*/
fun drivingPathPlanning(
starPoint: MSLatLng,
startName: String = "当前位置",
endPoint: MSLatLng,
endName: String = "",
ways: List<WayPoi>,
mapReadView: MapReadyView?,
// onDriveRoute: MineRoutePlans.OnDriveRoute
) {
// this.onDriveRoute = onDriveRoute
this.mapReadView = mapReadView
var context = UserCtx.instance.mContext
mNaviSession = NaviSession.getInstance()
// 开启语音播报
mNaviSession?.enableSound(true)
var naviSessionParams = NaviSessionParams().apply {
autoReroute = true
autoRemoveRoute = true
// useMineNaviGPS = true
}
mNaviSession!!.init(context, naviSessionParams)
mNaviSession?.setDataPreference(DataPreference.preferOnline)
mNaviSession?.addMineNaviListener(myMineNaviListener)
val starPoint = Tools.latLngToPoint(LatLng(starPoint.lat, starPoint.lng))
val endPoint = Tools.latLngToPoint(LatLng(endPoint.lat, endPoint.lng))
var startName = startName
var endName = endName
var wayPoints = mutableListOf<PoiFavorite>()
if (ways.count() > 0) {
ways.forEach { wpoi ->
var passPoint =
Tools.latLngToPoint(LatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng))
wayPoints.add(PoiFavorite(passPoint, wpoi.passName))
}
}
val routePlan = RoutePlan()
routePlan.setRoutePreference(RoutePlan.RoutePreference.none)
routePlan.setTransportationType(RoutePlan.TransportationType.car)
mNaviSession?.calculateDriveRoute(
PoiFavorite(starPoint, startName),
wayPoints,
PoiFavorite(endPoint, endName),
routePlan,
NaviSession.RouteMethod.multipleResult
)
}
/**
* 绘制规划的路线路径。
* @param routeBase 路线数据
*/
private fun drawPlanPath(
routeBase: RouteBase?
) {
// 移除旧的路线覆盖物
if (mRoute != null) {
mapReadView?.mMineMap?.removeOverlay(mRoute)
mRoute = null
}
val options = RouteOptions()
.routeBase(routeBase)
.colorType(Route.RouteColorType.enrouteTi)
.styleClass("DEFAULT")
// 添加新的路线到地图上,并设置样式和视角适配
mRoute = mapReadView?.mMineMap?.addRoute(options)
setRouteOverlayStyle(mRoute, false)
navEndFitWorldAreaToRect(mapReadView, routeBase)
}
private fun setRouteOverlayStyle(route: Route?, isSmallMapRoute: Boolean = false) {
var routeStyle = "DEFAULT"
if (isSmallMapRoute) {
routeStyle += ",small-map"
}
route?.selectStyleClass(routeStyle)
}
/**将指定的地图上的矩形区域显示到指定的屏幕矩形区域中
* @param mRouteBase 路线数据
*/
private fun navEndFitWorldAreaToRect(mapReadView: MapReadyView?, mRouteBase: RouteBase?) {
if (mRouteBase == null)
return
val rect = Rect(
200, 350, DisplayUtil.getScreenWidthPx() - 200,
DisplayUtil.getScreenHeightPx() - 200
)
// 获取单条道路信息
val boundingBox = mRouteBase.getBoundingBox()
mapReadView?.mMineMap?.fitWorldAreaToRect(boundingBox, rect)
// mapReadView?.mMineMap?.setElevation(0f)
}
/**自定义驾车路线返回*/
interface OnDriveRoute {
fun onDriverRoute(any: Any)
}
//-------------- 四维 导航监听 --------------------------
private var myMineNaviListener = object : MyMineNaviListener() {
private fun getRouteMsg(data: RouterErrorInfo): String {
var msg = ""
when (data.errCode) {
RouterErrorInfo.Type.ComputeFailed -> msg = "路线计算失败"
RouterErrorInfo.Type.destAuthError -> msg = "终点所在位置数据授权错误"
RouterErrorInfo.Type.destNoData -> msg = "重点所在位置没有数据"
RouterErrorInfo.Type.MissingSubfiles -> msg = "缺少途径省份数据"
RouterErrorInfo.Type.NetworkError -> msg = "网络连接错误"
RouterErrorInfo.Type.None -> {}
RouterErrorInfo.Type.NotEnoughMemory -> msg = "没有足够的内存可以使用"
RouterErrorInfo.Type.oriAuthError -> msg = "起点所在位置数据授权错误"
RouterErrorInfo.Type.OriDestTooNear -> msg = "起点和终点距离太近"
RouterErrorInfo.Type.oriNoData -> msg = "起点所在位置没有数据"
RouterErrorInfo.Type.SetDestFailed -> msg = "设置终点失败"
RouterErrorInfo.Type.SetOriFailed -> msg = "设置起点失败"
RouterErrorInfo.Type.waypointAuthError -> msg = "途经点所在位置数据授权错误"
RouterErrorInfo.Type.waypointNoData -> msg = "途经点所在位置没有数据"
}
return msg
}
override fun onCalculateRouteSuccess(data: RouteCollection) {
// 路线规划成功
// 获取单条道路信息
mRouteBase = data.routes.get(0)
drawPlanPath(mRouteBase)
// onDriveRoute?.onDriverRoute(mRouteBase)
}
override fun onCalculateRouteFailed(data: RouterErrorInfo) {
// 路线规划失败
val msg = getRouteMsg(data)
var a = 0
}
}
}
\ No newline at end of file
package com.sd.maplibrary.core.basic.mine
import com.minedata.minenavi.map.MineMap
import com.minedata.minenavi.mapdal.CoordType
import com.sd.maplibrary.core.MapReadyView
/**
*四维切换底图图层
*/
object MineToggleLayers {
fun toggleLayers(mapReadView: MapReadyView?, type: Int) {
when (type) {
1 -> {
switch2D(mapReadView?.mMineMap)
}
2 -> {
switchSatelliteLayer(mapReadView?.mMineMap)
}
}
}
private fun switch2D(mMineMap: MineMap?) {
//切换为2D平面图
mMineMap?.setElevation(90f)
mMineMap?.setStyleClass("DEFAULT")
mMineMap?.enableSatelliteLayer(false)
}
private fun switchSatelliteLayer(mMineMap: MineMap?) {
//切换为卫星图
mMineMap?.setSatelliteImageType(MineMap.SatelliteImageSource.bing, CoordType.GCJ02)
mMineMap?.setStyleClass("SATELLITE")
mMineMap?.enableSatelliteLayer(true)
}
}
\ No newline at end of file
package com.sd.maplibrary.factorys
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.bean.WayPoi
import com.sd.maplibrary.core.MapReadyView
import com.sd.maplibrary.core.basic.amap.AmapRoutePlans
import com.sd.maplibrary.core.basic.amap.AmapToggleLayers
/**
* 高德基础实现
* IBasicMap
*/
class AmapBasic:IBasicMap {
override fun toggleLayers(mapReadView: MapReadyView?, type: Int) {
AmapToggleLayers.toggleLayers(mapReadView, type)
}
override fun drivingPathPlanning(
starPoint: MSLatLng,
startName: String,
endPoint: MSLatLng,
endName: String,
ways: List<WayPoi>,
mapReadView: MapReadyView?
) {
AmapRoutePlans.drivingPathPlanning(starPoint, startName, endPoint, endName, ways, mapReadView)
}
companion object {
val amapBasic:AmapBasic by lazy { AmapBasic() }
}
}
\ No newline at end of file
package com.sd.maplibrary.factorys
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.bean.WayPoi
import com.sd.maplibrary.core.MapReadyView
/**
* 基础接口
*/
interface IBasicMap {
/**
* 切换地图图层
* @param mapReadView 地图准备就绪视图对象
* @param type 1=普通 2=卫星
*/
fun toggleLayers(mapReadView: MapReadyView?, type: Int)
/**驾车路径规划
* @param starPoint 起点坐标
* @param startName 起点名称
* @param endPoint 终点坐标
* @param endName 终点名称(高德可不传)
* @param ways 途经点集合
* @param mapReadView 地图对象
* @param onDriveRoute 路径规划结果回调
*/
fun drivingPathPlanning(
starPoint: MSLatLng,
startName: String = "当前位置",
endPoint: MSLatLng,
endName: String = "",
ways: List<WayPoi>,
mapReadView: MapReadyView?
// onDriveRoute: OnDriveRoute
)
}
\ No newline at end of file
package com.sd.maplibrary.factorys
/**
* 局部地图
*/
interface ICarRoadMap {
}
\ No newline at end of file
package com.sd.maplibrary.factorys
/**
* 高精地图接口
*/
interface IHIghMap {
}
\ No newline at end of file
package com.sd.maplibrary.factorys
/**
* AVP场景下的高精接口
*/
interface IHighAvpMap {
}
\ No newline at end of file
package com.sd.maplibrary.factorys
interface IMapFactory {
fun createBasic():IBasicMap
fun createHigh():IHIghMap
fun createHighAVp():IHighAvpMap
fun createCarRoad():ICarRoadMap
}
\ No newline at end of file
package com.sd.maplibrary.intfaces
package com.sd.maplibrary.factorys
import com.sd.maplibrary.MAP_TYPE
import com.sd.maplibrary.MSDKInitializer
/***地图工厂**/
object MapFactory {
object MapFactory : IMapFactory {
/***获取四维或者高德的实例****/
fun getMapInstance(): MapFuncs {
override fun createBasic(): IBasicMap {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
return MineCore.mineCore
return MineBasic.mineBasic
}
MAP_TYPE.AMAP -> {
return AMapCore.aMapCore
return AmapBasic.amapBasic
}
}
}
override fun createHigh(): IHIghMap {
TODO("Not yet implemented")
}
override fun createHighAVp(): IHighAvpMap {
TODO("Not yet implemented")
}
override fun createCarRoad(): ICarRoadMap {
TODO("Not yet implemented")
}
}
\ No newline at end of file
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