Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
MapMultiEngine
Commits
fc1586ea
Commit
fc1586ea
authored
Sep 01, 2025
by
p x
Browse files
加入自实现的导航类
parent
42135beb
Changes
51
Hide whitespace changes
Inline
Side-by-side
.kotlin/errors/errors-1756721167195.log
0 → 100644
View file @
fc1586ea
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
app/src/main/AndroidManifest.xml
View file @
fc1586ea
...
@@ -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"
...
...
app/src/main/java/com/sd/mapmultiengine/MainActivity.kt
View file @
fc1586ea
...
@@ -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),
...
...
app/src/main/java/com/sd/mapmultiengine/ui/ShowMyLocLandian.kt
View file @
fc1586ea
...
@@ -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
)
}
}
})
})
...
...
app/src/main/java/com/sd/mapmultiengine/ui/TDriveRouteActivity.kt
View file @
fc1586ea
...
@@ -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
app/src/main/java/com/sd/mapmultiengine/ui/TLayersActivity.kt
View file @
fc1586ea
...
@@ -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)
}
}
}
}
}
}
...
...
app/src/main/res/layout/activity_display_map.xml
View file @
fc1586ea
...
@@ -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"
...
...
app/src/main/res/layout/activity_tdrive_route.xml
View file @
fc1586ea
...
@@ -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"
...
...
maplibrary/build.gradle.kts
View file @
fc1586ea
...
@@ -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
)
...
...
maplibrary/src/main/AndroidManifest.xml
View file @
fc1586ea
<?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
maplibrary/src/main/java/com/sd/maplibrary/bean/MSLatLng.kt
View file @
fc1586ea
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
maplibrary/src/main/java/com/sd/maplibrary/bean/WayPoi.kt
View file @
fc1586ea
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
maplibrary/src/main/java/com/sd/maplibrary/core/basic/amap/AmapNai.kt
0 → 100644
View file @
fc1586ea
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
maplibrary/src/main/java/com/sd/maplibrary/core/basic/amap/AmapRoutePlans.kt
View file @
fc1586ea
...
@@ -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
?)
{
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/basic/mine/MineLocationStyle.kt
View file @
fc1586ea
...
@@ -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
()
}
/**
/**
* 设置定位蓝点样式
* 设置定位蓝点样式
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/basic/mine/MineNai.kt
0 → 100644
View file @
fc1586ea
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
maplibrary/src/main/java/com/sd/maplibrary/core/basic/mine/MineNaiParams.kt
0 → 100644
View file @
fc1586ea
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
maplibrary/src/main/java/com/sd/maplibrary/core/basic/mine/MineRoutePlans.kt
View file @
fc1586ea
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
(
myMineNav
iListener
)
mNaviSession
?.
addMineNaviListener
(
plan
iListener
)
val
s
tarPoint
=
Tools
.
latLngToPoint
(
LatLng
(
starPoint
.
lat
,
starPoint
.
lng
))
mS
tar
t
Point
=
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
(
s
tarPoint
,
startName
),
PoiFavorite
(
mS
tar
t
Point
,
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
myMineNav
iListener
=
object
:
MyMineNaviListener
()
{
private
var
plan
iListener
=
object
:
MyMineNaviListener
()
{
private
fun
getRouteMsg
(
data
:
RouterErrorInfo
):
String
{
private
fun
getRouteMsg
(
data
:
RouterErrorInfo
):
String
{
var
msg
=
""
var
msg
=
""
...
...
maplibrary/src/main/java/com/sd/maplibrary/factorys/AbsMapCore.kt
View file @
fc1586ea
...
@@ -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
maplibrary/src/main/java/com/sd/maplibrary/factorys/AmapBasic.kt
View file @
fc1586ea
...
@@ -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
()
}
}
}
...
...
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment