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
f8483b51
Commit
f8483b51
authored
Aug 25, 2025
by
p x
Browse files
对照代码写文档
parent
aa564e16
Changes
41
Hide whitespace changes
Inline
Side-by-side
gradle.properties
View file @
f8483b51
...
@@ -21,4 +21,7 @@ kotlin.code.style=official
...
@@ -21,4 +21,7 @@ kotlin.code.style=official
# resources declared in the library itself and none from the library's dependencies,
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass
=
true
android.nonTransitiveRClass
=
true
#
android.defaults.buildfeatures.databinding
=
true
#android.defaults.buildfeatures.databinding=true
\ No newline at end of file
#????gradle??????????DGP v2:
org.jetbrains.dokka.experimental.gradle.pluginMode
=
V2Enabled
#
org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn
=
true
\ No newline at end of file
maplibrary/build.gradle.kts
View file @
f8483b51
...
@@ -2,8 +2,8 @@ plugins {
...
@@ -2,8 +2,8 @@ plugins {
alias
(
libs
.
plugins
.
android
.
library
)
alias
(
libs
.
plugins
.
android
.
library
)
alias
(
libs
.
plugins
.
kotlin
.
android
)
alias
(
libs
.
plugins
.
kotlin
.
android
)
id
(
"kotlin-kapt"
)
id
(
"kotlin-kapt"
)
// kotlin("jvm") version "2.
0.21" // 替换x.y.z为你的Kotlin版本
// kotlin("jvm") version "2.
1.10"
id
(
"org.jetbrains.dokka"
)
//
version
(
"2.0.0"
) // 确保使用正确的Dokka版本
id
(
"org.jetbrains.dokka"
)
version
"2.0.0"
}
}
...
@@ -74,7 +74,8 @@ dependencies {
...
@@ -74,7 +74,8 @@ dependencies {
testImplementation
(
libs
.
junit
)
testImplementation
(
libs
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
//文档插件库
// implementation(libs.android.documentation.plugin)
//高德
//高德
// implementation("com.amap.api:navi-3dmap:latest.integration")
// implementation("com.amap.api:navi-3dmap:latest.integration")
// implementation("com.amap.api:search:latest.integration")
// implementation("com.amap.api:search:latest.integration")
...
...
maplibrary/src/main/AndroidManifest.xml
View file @
f8483b51
...
@@ -35,13 +35,13 @@
...
@@ -35,13 +35,13 @@
android:name=
"org.apache.http.legacy"
android:name=
"org.apache.http.legacy"
android:required=
"false"
/>
android:required=
"false"
/>
<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" />
-->
<!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
<!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
<service
android:name=
"com.amap.api.location.APSService"
/>
<service
android:name=
"com.amap.api.location.APSService"
/>
...
...
maplibrary/src/main/java/com/sd/maplibrary/MSDKInitializer.kt
View file @
f8483b51
...
@@ -12,16 +12,17 @@ import com.minedata.minenavi.poiquery.SearchUrlType
...
@@ -12,16 +12,17 @@ import com.minedata.minenavi.poiquery.SearchUrlType
import
com.permissionx.guolindev.PermissionX
import
com.permissionx.guolindev.PermissionX
/**AMAP = 高德
/**
* MINE =四维
* AMAP 高德在线地图
* ***/
* MINE 四维在线地图
*/
enum
class
MAP_TYPE
{
enum
class
MAP_TYPE
{
MINE
,
MINE
,
AMAP
AMAP
}
}
/**用户传入上下文*
**
/
/**用户传入上下文*/
private
class
UserCtx
{
class
UserCtx
{
var
mContext
:
Context
?
=
null
var
mContext
:
Context
?
=
null
var
map_type
:
MAP_TYPE
=
MAP_TYPE
.
MINE
var
map_type
:
MAP_TYPE
=
MAP_TYPE
.
MINE
...
@@ -32,36 +33,57 @@ private class UserCtx {
...
@@ -32,36 +33,57 @@ private class UserCtx {
interface
OnSdkInitCb
{
interface
OnSdkInitCb
{
/**
*
初始化成功*
*
/
/**初始化成功*/
fun
onInitSuccess
()
fun
onInitSuccess
()
/**
*
初始化成失败*
*
/
/**初始化成失败*/
fun
onInitFailed
(
msg
:
String
)
fun
onInitFailed
(
msg
:
String
)
}
}
/**SDK初始化类*/
object
MSDKInitializer
{
object
MSDKInitializer
{
/**SDK初始化成功(失败)回调*/
private
var
onSdkInitCb
:
OnSdkInitCb
?
=
null
private
var
onSdkInitCb
:
OnSdkInitCb
?
=
null
/**
* 初始化地图SDK
*
* @param context 应用上下文,用于SDK初始化
* @param map_type 地图类型,指定要初始化的地图类型
* @param onSdkInitCb SDK初始化回调接口,用于通知初始化结果
*/
fun
initializeMap
(
context
:
Context
,
map_type
:
MAP_TYPE
,
onSdkInitCb
:
OnSdkInitCb
)
{
fun
initializeMap
(
context
:
Context
,
map_type
:
MAP_TYPE
,
onSdkInitCb
:
OnSdkInitCb
)
{
// 保存初始化回调接口
this
.
onSdkInitCb
=
onSdkInitCb
this
.
onSdkInitCb
=
onSdkInitCb
// 设置用户上下文信息
UserCtx
.
instance
.
mContext
=
context
UserCtx
.
instance
.
mContext
=
context
UserCtx
.
instance
.
map_type
=
map_type
UserCtx
.
instance
.
map_type
=
map_type
// 请求必要的权限
requestPers
()
requestPers
()
}
}
/**
* 获取当前用户的地图类型设置
*
* @return 返回当前用户设置的地图类型枚举值
*/
fun
getMapType
():
MAP_TYPE
{
fun
getMapType
():
MAP_TYPE
{
return
UserCtx
.
instance
.
map_type
return
UserCtx
.
instance
.
map_type
}
}
/**使用API初始化地图**/
/**
* 初始化地图类型相关配置
*/
private
fun
mapTypeInit
()
{
private
fun
mapTypeInit
()
{
val
ctx
=
UserCtx
.
instance
.
mContext
val
ctx
=
UserCtx
.
instance
.
mContext
when
(
UserCtx
.
instance
.
map_type
)
{
when
(
UserCtx
.
instance
.
map_type
)
{
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
// 高德地图隐私合规设置
MapsInitializer
.
updatePrivacyShow
(
ctx
,
true
,
true
)
MapsInitializer
.
updatePrivacyShow
(
ctx
,
true
,
true
)
MapsInitializer
.
updatePrivacyAgree
(
ctx
,
true
)
MapsInitializer
.
updatePrivacyAgree
(
ctx
,
true
)
// 高德地图不支持API初始化,直接回调失败
onSdkInitCb
?.
onInitFailed
(
"高德不支持api初始化"
)
onSdkInitCb
?.
onInitFailed
(
"高德不支持api初始化"
)
}
}
...
@@ -71,6 +93,7 @@ object MSDKInitializer {
...
@@ -71,6 +93,7 @@ object MSDKInitializer {
//设置地图坐标系
//设置地图坐标系
SDKInitializer
.
setCoordType
(
CoordType
.
GCJ02
)
SDKInitializer
.
setCoordType
(
CoordType
.
GCJ02
)
SDKInitializer
.
setSearchUrlType
(
SearchUrlType
.
v1
)
SDKInitializer
.
setSearchUrlType
(
SearchUrlType
.
v1
)
// 执行SDK初始化
SDKInitializer
.
initialize
(
ctx
,
object
:
InitListener
{
SDKInitializer
.
initialize
(
ctx
,
object
:
InitListener
{
override
fun
onInitSuccess
()
{
override
fun
onInitSuccess
()
{
onSdkInitCb
?.
onInitSuccess
()
onSdkInitCb
?.
onInitSuccess
()
...
@@ -89,6 +112,7 @@ object MSDKInitializer {
...
@@ -89,6 +112,7 @@ object MSDKInitializer {
}
}
}
}
// 请求权限
private
fun
requestPers
()
{
private
fun
requestPers
()
{
if
(
UserCtx
.
instance
.
mContext
is
FragmentActivity
)
{
if
(
UserCtx
.
instance
.
mContext
is
FragmentActivity
)
{
var
pers
=
mutableListOf
(
var
pers
=
mutableListOf
(
...
@@ -130,5 +154,4 @@ object MSDKInitializer {
...
@@ -130,5 +154,4 @@ object MSDKInitializer {
}
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/bean/DriverRouteBean.kt
View file @
f8483b51
...
@@ -5,7 +5,7 @@ import com.minedata.minenavi.map.Route
...
@@ -5,7 +5,7 @@ import com.minedata.minenavi.map.Route
import
com.minedata.minenavi.navi.RouteBase
import
com.minedata.minenavi.navi.RouteBase
import
com.minedata.minenavi.navi.RouteCollection
import
com.minedata.minenavi.navi.RouteCollection
/**
**
驾车路径规划返回*
**
/
/**驾车路径规划返回*/
class
DriverRouteBean
{
class
DriverRouteBean
{
companion
object
{
companion
object
{
...
@@ -16,13 +16,14 @@ class DriverRouteBean {
...
@@ -16,13 +16,14 @@ class DriverRouteBean {
var
routeCollection
:
RouteCollection
?
=
null
var
routeCollection
:
RouteCollection
?
=
null
//高德
//高德
var
aMapCalcRouteResult
:
AMapCalcRouteResult
?=
null
var
aMapCalcRouteResult
:
AMapCalcRouteResult
?=
null
// var driveRouteResult: DriveRouteResult? = null
// var driveRouteResult: DriveRouteResult? = null
}
}
/***路径规划图层对象
/**
* 路径规划图层对象
* 只哟四维有
* 只哟四维有
*
**
/
*/
class
RouteOver
{
class
RouteOver
{
companion
object
{
companion
object
{
val
instance
:
RouteOver
by
lazy
{
RouteOver
()
}
val
instance
:
RouteOver
by
lazy
{
RouteOver
()
}
...
...
maplibrary/src/main/java/com/sd/maplibrary/bean/MSLatLng.kt
View file @
f8483b51
package
com.sd.maplibrary.bean
package
com.sd.maplibrary.bean
/**
整合四维和高德的
经纬度*
*
/
/**经纬度*/
class
MSLatLng
{
class
MSLatLng
{
constructor
(
lat
:
Double
,
lng
:
Double
)
{
constructor
(
lat
:
Double
,
lng
:
Double
)
{
...
@@ -8,6 +8,9 @@ class MSLatLng {
...
@@ -8,6 +8,9 @@ class MSLatLng {
this
.
lng
=
lng
this
.
lng
=
lng
}
}
var
lat
=
0.0
// 纬度
var
lng
=
0.0
var
lat
=
0.0
// 经度
var
lng
=
0.0
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/bean/MSLocBean.kt
View file @
f8483b51
package
com.sd.maplibrary.bean
package
com.sd.maplibrary.bean
/**
*
定位数据回调*
*
/
/**定位数据回调*/
class
MSLocBean
{
class
MSLocBean
{
companion
object
{
companion
object
{
...
@@ -10,15 +10,13 @@ class MSLocBean {
...
@@ -10,15 +10,13 @@ class MSLocBean {
//当前经纬度
//当前经纬度
var
lat
=
0.0
var
lat
=
0.0
var
lng
=
0.0
var
lng
=
0.0
/
/速度
/
**速度 m/s*/
var
speed
=
0f
var
speed
=
0f
/
/
航向角
/
**
航向角
*/
var
bearing
=
0f
var
bearing
=
0f
/
/精度
/
**精度*/
var
accuracy
=
0f
var
accuracy
=
0f
/
/高程
/
**高程*/
var
altitude
=
0.0
var
altitude
=
0.0
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/bean/PoiSearchRes.kt
View file @
f8483b51
package
com.sd.maplibrary.bean
package
com.sd.maplibrary.bean
/**
**
POI
搜索返回*
*
/
/**POI搜索返回*/
class
PoiSearchRes
{
class
PoiSearchRes
{
var
lat
=
0.0
var
lat
=
0.0
var
lng
=
0.0
var
lng
=
0.0
var
cityName
=
""
var
cityName
=
""
/
/
行政
去
编码
/
**
行政
区
编码
*/
var
adCode
=
""
var
adCode
=
""
/
/
POI的名称
/
**
POI的名称
*/
var
title
=
""
var
title
=
""
/
/
POI的地址
/
**
POI的地址
*/
var
snippet
=
""
var
snippet
=
""
/
/
POI距离中心点的距离。范围搜索才有
/
**
POI距离中心点的距离。范围搜索才有
*/
var
distance
=
0
var
distance
=
0
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/bean/RegeocodeRes.kt
View file @
f8483b51
...
@@ -2,18 +2,18 @@ package com.sd.maplibrary.bean
...
@@ -2,18 +2,18 @@ package com.sd.maplibrary.bean
/***逆地理编码返回**/
/***逆地理编码返回**/
class
RegeocodeRes
{
class
RegeocodeRes
{
/
/
逆地理编码返回的所在省名称
/
**
逆地理编码返回的所在省名称
*/
var
province
=
""
var
province
=
""
// var provinceCode = ""
// var provinceCode = ""
/
/
逆地理编码返回的所在城市名称
/
**
逆地理编码返回的所在城市名称
*/
var
city
=
""
var
city
=
""
var
cityCode
=
""
var
cityCode
=
""
/
/
逆地理编码返回的所在区(县)名称。
/
**
逆地理编码返回的所在区(县)名称。
*/
var
district
=
""
var
district
=
""
/
/
逆地理编码返回的所在乡镇/街道。
/
**
逆地理编码返回的所在乡镇/街道。
*/
var
town
=
""
var
town
=
""
//逆地理编码返回的所在村镇。
//逆地理编码返回的所在村镇。
...
...
maplibrary/src/main/java/com/sd/maplibrary/bean/WayPoi.kt
View file @
f8483b51
package
com.sd.maplibrary.bean
package
com.sd.maplibrary.bean
/**
*
途经点Poi***/
/**途经点Poi***/
class
WayPoi
{
class
WayPoi
{
/
/
途经点名坐标
/
**
途经点名坐标
*/
var
passPoint
:
MSLatLng
?
=
null
var
passPoint
:
MSLatLng
?
=
null
/
/途
经点名字
/
**
经点名字
*/
var
passName
=
""
var
passName
=
""
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/core/MSMapUtil.kt
→
maplibrary/src/main/java/com/sd/maplibrary/core/MS
Calcu
MapUtil.kt
View file @
f8483b51
...
@@ -8,21 +8,25 @@ import com.sd.maplibrary.bean.MSLatLng
...
@@ -8,21 +8,25 @@ import com.sd.maplibrary.bean.MSLatLng
import
com.amap.api.maps.model.LatLng
as
ALatLng
import
com.amap.api.maps.model.LatLng
as
ALatLng
/**
**
/**
* 地图工具
* 地图
计算
工具
*
***
/
*/
object
MSMapUtil
{
object
MS
Calcu
MapUtil
{
/***计算俩点距离
/**
* @return 返回单位(米)
* 计算两点之间的直线距离
* ***/
* @param latLng1 第一个坐标点
* @param latLng2 第二个坐标点
* @return 返回两点间距离,单位为米
*/
fun
calculateLineDistance
(
fun
calculateLineDistance
(
mapReadView
:
MapReadyView
?,
latLng1
:
MSLatLng
,
latLng1
:
MSLatLng
,
latLng2
:
MSLatLng
latLng2
:
MSLatLng
):
Float
{
):
Float
{
// 根据不同的地图类型选择相应的距离计算方法
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
// 使用Android原生Location类计算两点间距离
var
results
=
FloatArray
(
1
)
var
results
=
FloatArray
(
1
)
Location
.
distanceBetween
(
Location
.
distanceBetween
(
latLng1
.
lat
,
latLng1
.
lat
,
...
@@ -35,6 +39,7 @@ object MSMapUtil {
...
@@ -35,6 +39,7 @@ object MSMapUtil {
}
}
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
// 使用高德地图工具类计算两点间距离
val
latlngA
=
ALatLng
(
latLng1
.
lat
,
latLng1
.
lng
)
val
latlngA
=
ALatLng
(
latLng1
.
lat
,
latLng1
.
lng
)
val
latlngB
=
ALatLng
(
latLng2
.
lat
,
latLng2
.
lng
)
val
latlngB
=
ALatLng
(
latLng2
.
lat
,
latLng2
.
lng
)
val
distance
=
AMapUtils
.
calculateLineDistance
(
latlngA
,
latlngB
)
val
distance
=
AMapUtils
.
calculateLineDistance
(
latlngA
,
latlngB
)
...
@@ -44,15 +49,17 @@ object MSMapUtil {
...
@@ -44,15 +49,17 @@ object MSMapUtil {
}
}
/*****计算矩形面具
/**
* @param latLng1 = 左上角
* 计算矩形面积
* @param latLng2 = 右下角
* @param latLng1 矩形左上角坐标
* **/
* @param latLng2 矩形右下角坐标
* @return 矩形面积,单位为平方米
*/
fun
calculateArea
(
fun
calculateArea
(
mapReadView
:
MapReadyView
?,
latLng1
:
MSLatLng
,
latLng1
:
MSLatLng
,
latLng2
:
MSLatLng
latLng2
:
MSLatLng
):
Float
{
):
Float
{
// 根据不同地图类型进行面积计算
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
return
0f
return
0f
...
@@ -66,4 +73,5 @@ object MSMapUtil {
...
@@ -66,4 +73,5 @@ object MSMapUtil {
}
}
}
}
}
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/core/MSCanvesInMap.kt
View file @
f8483b51
package
com.sd.maplibrary.core
package
com.sd.maplibrary.core
import
android.content.Context
import
android.graphics.BitmapFactory
import
android.graphics.BitmapFactory
import
androidx.core.graphics.toColorInt
import
androidx.core.graphics.toColorInt
import
com.amap.api.maps.model.BitmapDescriptorFactory
import
com.amap.api.maps.model.BitmapDescriptorFactory
...
@@ -17,6 +16,7 @@ import com.minedata.minenavi.mapdal.LatLng
...
@@ -17,6 +16,7 @@ import com.minedata.minenavi.mapdal.LatLng
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.R
import
com.sd.maplibrary.R
import
com.sd.maplibrary.UserCtx
import
com.sd.maplibrary.bean.MSLatLng
import
com.sd.maplibrary.bean.MSLatLng
import
com.amap.api.maps.model.CircleOptions
as
ACircleOptions
import
com.amap.api.maps.model.CircleOptions
as
ACircleOptions
import
com.amap.api.maps.model.LatLng
as
ALatLng
import
com.amap.api.maps.model.LatLng
as
ALatLng
...
@@ -25,7 +25,7 @@ import com.amap.api.maps.model.MarkerOptions as AMarkerOptions
...
@@ -25,7 +25,7 @@ import com.amap.api.maps.model.MarkerOptions as AMarkerOptions
import
com.amap.api.maps.model.PolygonOptions
as
APolygonOptions
import
com.amap.api.maps.model.PolygonOptions
as
APolygonOptions
import
com.amap.api.maps.model.PolylineOptions
as
APolylineOptions
import
com.amap.api.maps.model.PolylineOptions
as
APolylineOptions
/**
**
返回的mark*
*
/
/**返回的mark*/
object
MSMarker
{
object
MSMarker
{
//四维mark
//四维mark
var
maker
:
Marker
?
=
null
var
maker
:
Marker
?
=
null
...
@@ -34,10 +34,16 @@ object MSMarker {
...
@@ -34,10 +34,16 @@ object MSMarker {
var
amaker
:
AMarker
?
=
null
var
amaker
:
AMarker
?
=
null
}
}
/**
**
返回的图层*
*
/
/**返回的图层*/
object
MSOverlay
{
object
MSOverlay
{
//四维mark
//四维线图层
var
overlay
:
Overlay
?
=
null
var
polyline
:
Overlay
?
=
null
//四维面图层
var
polygon
:
Overlay
?
=
null
//四维圆形图层
var
circle
:
Overlay
?
=
null
//高德圆形
//高德圆形
var
aCircle
:
Circle
?
=
null
var
aCircle
:
Circle
?
=
null
...
@@ -51,23 +57,31 @@ object MSOverlay {
...
@@ -51,23 +57,31 @@ object MSOverlay {
}
}
/*****在地图上绘制**/
/**
* 在地图上绘制
*/
object
MSCanvesInMap
{
object
MSCanvesInMap
{
/***绘制Market 点标记
* @param lat 纬度
/**
* @param lng 经度
* 绘制 marker 点
* @return Marker对象 用于删掉
* @param mapReadView 地图准备就绪的视图对象
* ***/
* @param lat 纬度坐标
* @param lng 经度坐标
* @return MSMarker 标记点对象
*/
fun
drawMarket
(
fun
drawMarket
(
context
:
Context
,
mapReadView
:
MapReadyView
?,
mapReadView
:
MapReadyView
?,
lat
:
Double
,
lat
:
Double
,
lng
:
Double
lng
:
Double
):
MSMarker
{
):
MSMarker
{
var
context
=
UserCtx
.
instance
.
mContext
// 根据不同的地图类型绘制标记点
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
// 处理自定义地图类型的标记点绘制
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
val
icon
=
BitmapFactory
.
decodeResource
(
context
.
resources
,
R
.
drawable
.
market_loc
)
val
icon
=
BitmapFactory
.
decodeResource
(
context
?
.
resources
,
R
.
drawable
.
market_loc
)
val
latLng
=
LatLng
(
lat
,
lng
)
val
latLng
=
LatLng
(
lat
,
lng
)
var
options
=
MarkerOptions
()
var
options
=
MarkerOptions
()
.
zLevel
(
7
)
.
zLevel
(
7
)
...
@@ -79,6 +93,7 @@ object MSCanvesInMap {
...
@@ -79,6 +93,7 @@ object MSCanvesInMap {
return
MSMarker
return
MSMarker
}
}
// 处理高德地图类型的标记点绘制
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
val
aLatLng
=
ALatLng
(
lat
,
lng
)
val
aLatLng
=
ALatLng
(
lat
,
lng
)
val
aMarkerOption
=
AMarkerOptions
().
apply
{
val
aMarkerOption
=
AMarkerOptions
().
apply
{
...
@@ -86,7 +101,7 @@ object MSCanvesInMap {
...
@@ -86,7 +101,7 @@ object MSCanvesInMap {
icon
(
icon
(
BitmapDescriptorFactory
.
fromBitmap
(
BitmapDescriptorFactory
.
fromBitmap
(
BitmapFactory
BitmapFactory
.
decodeResource
(
context
.
resources
,
R
.
drawable
.
market_loc
)
.
decodeResource
(
context
?
.
resources
,
R
.
drawable
.
market_loc
)
)
)
)
)
}
}
...
@@ -98,12 +113,15 @@ object MSCanvesInMap {
...
@@ -98,12 +113,15 @@ object MSCanvesInMap {
}
}
/***绘制线
/**
*@param mapReadView 地图加载返回
* 绘制线
*@param width = 宽度
* @param mapReadView 地图加载返回
*@param fcolor = 填充颜色
* @param msLatLng 坐标点集合
*@param isDotted = 是否虚线
* @param width 线宽度,默认为10f
* ***/
* @param fcolor 线颜色,默认为"#FF00FF"对应的int值
* @param isDotted 是否为虚线,默认为false
* @return MSOverlay 覆盖物对象
*/
fun
drawPolyline
(
fun
drawPolyline
(
mapReadView
:
MapReadyView
?,
mapReadView
:
MapReadyView
?,
msLatLng
:
List
<
MSLatLng
>,
msLatLng
:
List
<
MSLatLng
>,
...
@@ -111,7 +129,9 @@ object MSCanvesInMap {
...
@@ -111,7 +129,9 @@ object MSCanvesInMap {
fcolor
:
Int
=
"#FF00FF"
.
toColorInt
(),
fcolor
:
Int
=
"#FF00FF"
.
toColorInt
(),
isDotted
:
Boolean
=
false
isDotted
:
Boolean
=
false
):
MSOverlay
{
):
MSOverlay
{
// 根据地图类型绘制不同平台的线
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
// 绘制自定义地图的线
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
var
latLngs
=
msLatLng
.
map
{
var
latLngs
=
msLatLng
.
map
{
LatLng
(
it
.
lat
,
it
.
lng
)
LatLng
(
it
.
lat
,
it
.
lng
)
...
@@ -123,10 +143,11 @@ object MSCanvesInMap {
...
@@ -123,10 +143,11 @@ object MSCanvesInMap {
.
color
(
fcolor
)
.
color
(
fcolor
)
.
setDottedLine
(
isDotted
)
.
setDottedLine
(
isDotted
)
var
polyline
=
mapReadView
?.
mMineMap
?.
addPolyline
(
options
)
var
polyline
=
mapReadView
?.
mMineMap
?.
addPolyline
(
options
)
MSOverlay
.
overlay
=
polyline
MSOverlay
.
polyline
=
polyline
return
MSOverlay
return
MSOverlay
}
}
// 绘制高德地图的线
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
var
latLngs
=
msLatLng
.
map
{
var
latLngs
=
msLatLng
.
map
{
ALatLng
(
it
.
lat
,
it
.
lng
)
ALatLng
(
it
.
lat
,
it
.
lng
)
...
@@ -142,13 +163,17 @@ object MSCanvesInMap {
...
@@ -142,13 +163,17 @@ object MSCanvesInMap {
}
}
}
}
/***绘制圆形
/**绘制圆形
* @param mapReadView 地图准备就绪视图对象
* @param lat 维度
* @param lat 维度
* @param lng 经度
* @param lng 经度
* @param radius 半径(米)
* @param radius 半径(米)
* @param fillColor 填充颜色
* @param fillColor 填充颜色,默认为半透明红色
* @param 边框颜色
* @param strokeColor 边框颜色,默认为半透明蓝色
* ****/
* @param strokeWidth 边框宽度,默认为15f
* @return MSOverlay 返回覆盖物对象
*/
fun
drawCircle
(
fun
drawCircle
(
mapReadView
:
MapReadyView
?,
mapReadView
:
MapReadyView
?,
lat
:
Double
,
lat
:
Double
,
...
@@ -158,6 +183,7 @@ object MSCanvesInMap {
...
@@ -158,6 +183,7 @@ object MSCanvesInMap {
strokeColor
:
Int
=
"#500000FF"
.
toColorInt
(),
strokeColor
:
Int
=
"#500000FF"
.
toColorInt
(),
strokeWidth
:
Float
=
15f
strokeWidth
:
Float
=
15f
):
MSOverlay
{
):
MSOverlay
{
// 根据地图类型绘制不同类型的圆形
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
var
latLng
=
LatLng
(
lat
,
lng
)
var
latLng
=
LatLng
(
lat
,
lng
)
...
@@ -168,7 +194,7 @@ object MSCanvesInMap {
...
@@ -168,7 +194,7 @@ object MSCanvesInMap {
.
strokeColor
(
strokeColor
)
.
strokeColor
(
strokeColor
)
.
strokeWidth
(
strokeWidth
)
.
strokeWidth
(
strokeWidth
)
var
circle
=
mapReadView
?.
mMineMap
?.
addCircle
(
options
)
var
circle
=
mapReadView
?.
mMineMap
?.
addCircle
(
options
)
MSOverlay
.
overlay
=
circle
MSOverlay
.
circle
=
circle
return
MSOverlay
return
MSOverlay
}
}
...
@@ -190,9 +216,9 @@ object MSCanvesInMap {
...
@@ -190,9 +216,9 @@ object MSCanvesInMap {
/***
/***
* 绘制多边形
* 绘制多边形
*@param msLatLng 添加多边形顶点坐标集合
*
@param msLatLng 添加多边形顶点坐标集合
* @param dLine 是否虚线
* @param dLine 是否虚线
*@param fillColor 填充颜色
*
@param fillColor 填充颜色
* @param strokeWidth 边框宽度
* @param strokeWidth 边框宽度
* @param strokeColor 边框颜色
* @param strokeColor 边框颜色
* ****/
* ****/
...
@@ -218,7 +244,7 @@ object MSCanvesInMap {
...
@@ -218,7 +244,7 @@ object MSCanvesInMap {
dottedLine
(
dLine
)
dottedLine
(
dLine
)
}
}
var
polygon
=
mapReadView
?.
mMineMap
?.
addPolygon
(
polygonOptions
)
var
polygon
=
mapReadView
?.
mMineMap
?.
addPolygon
(
polygonOptions
)
MSOverlay
.
overlay
=
polygon
MSOverlay
.
polygon
=
polygon
return
MSOverlay
return
MSOverlay
}
}
...
@@ -240,29 +266,44 @@ object MSCanvesInMap {
...
@@ -240,29 +266,44 @@ object MSCanvesInMap {
}
}
/****删除Marker**/
/**
* 删除地图上的标记点
* @param mapReadView 地图准备就绪的视图对象,可能为null
* @param mSMarker 要删除的标记点对象,可能为null
*/
fun
deleteMarker
(
mapReadView
:
MapReadyView
?,
mSMarker
:
MSMarker
?)
{
fun
deleteMarker
(
mapReadView
:
MapReadyView
?,
mSMarker
:
MSMarker
?)
{
if
(
mSMarker
==
null
)
if
(
mSMarker
==
null
)
return
return
// 根据不同的地图类型执行相应的删除操作
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
// 从自定义地图中移除指定的标记点
mapReadView
?.
mMineMap
?.
removeMarker
(
mSMarker
.
maker
)
mapReadView
?.
mMineMap
?.
removeMarker
(
mSMarker
.
maker
)
}
}
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
// 清空地图上所有已经标注的marker
//移除指定的标记点
mapReadView
?.
aMap
?.
clear
()
MSMarker
.
amaker
?.
remove
()
// 清空高德地图上所有已经标注的marker
// mapReadView?.aMap?.clear()
}
}
}
}
}
}
/****删除线**/
/**
* 删除地图上的线
* @param mapReadView 地图准备就绪的视图对象,可能为null
* @param mSOverlay 包含折线信息的覆盖物对象,可能为null
*/
fun
deletePolyline
(
mapReadView
:
MapReadyView
?,
mSOverlay
:
MSOverlay
?)
{
fun
deletePolyline
(
mapReadView
:
MapReadyView
?,
mSOverlay
:
MSOverlay
?)
{
if
(
mSOverlay
==
null
)
if
(
mSOverlay
==
null
)
return
return
// 根据不同的地图类型删除对应的折线
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
mapReadView
?.
mMineMap
?.
removeOverlay
(
mSOverlay
.
overlay
)
mapReadView
?.
mMineMap
?.
removeOverlay
(
mSOverlay
.
polyline
)
}
}
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
...
@@ -272,14 +313,19 @@ object MSCanvesInMap {
...
@@ -272,14 +313,19 @@ object MSCanvesInMap {
}
}
/****删除圆形**/
/**
* 删除圆形覆盖物
* @param mapReadView 地图准备视图对象,可能为null
* @param mSOverlay 圆形覆盖物对象,可能为null
*/
fun
deleteCircle
(
mapReadView
:
MapReadyView
?,
mSOverlay
:
MSOverlay
?)
{
fun
deleteCircle
(
mapReadView
:
MapReadyView
?,
mSOverlay
:
MSOverlay
?)
{
if
(
mSOverlay
==
null
)
{
if
(
mSOverlay
==
null
)
{
return
return
}
}
// 根据不同的地图类型执行对应的圆形删除操作
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
mapReadView
?.
mMineMap
?.
removeOverlay
(
mSOverlay
.
overlay
)
mapReadView
?.
mMineMap
?.
removeOverlay
(
mSOverlay
.
circle
)
}
}
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
...
@@ -288,14 +334,19 @@ object MSCanvesInMap {
...
@@ -288,14 +334,19 @@ object MSCanvesInMap {
}
}
}
}
/****删除面**/
/**
* 删除地图上的面
* @param mapReadView 地图准备就绪的视图对象,可能为null
* @param mSOverlay 面覆盖物对象,可能为null
*/
fun
deletePolygon
(
mapReadView
:
MapReadyView
?,
mSOverlay
:
MSOverlay
?)
{
fun
deletePolygon
(
mapReadView
:
MapReadyView
?,
mSOverlay
:
MSOverlay
?)
{
if
(
mSOverlay
==
null
)
{
if
(
mSOverlay
==
null
)
{
return
return
}
}
// 根据不同的地图类型执行对应的删除操作
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
mapReadView
?.
mMineMap
?.
removeOverlay
(
mSOverlay
.
overlay
)
mapReadView
?.
mMineMap
?.
removeOverlay
(
mSOverlay
.
polygon
)
}
}
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSGestures.kt
View file @
f8483b51
...
@@ -3,10 +3,10 @@ package com.sd.maplibrary.core
...
@@ -3,10 +3,10 @@ package com.sd.maplibrary.core
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.ui.MapMultiView
/**
/***手势交互**/
* 手势交互
*/
object
MSGestures
{
object
MSGestures
{
//
//
...
@@ -24,11 +24,13 @@ object MSGestures {
...
@@ -24,11 +24,13 @@ object MSGestures {
// }
// }
/***旋转开关
/**
* @param mapReadView 从addMapRenderCallback(object : OnMapReadyLis 里拿
* 设置地图旋转手势是否可用
* @param enable 是否可用
* @param mapReadView 地图准备就绪视图对象
* **/
* @param enable 是否启用旋转手势功能
fun
setRotateGesturesEnabled
(
mapReadView
:
MapReadyView
?,
enable
:
Boolean
)
{
*/
fun
setRotateGesturesEnabled
(
mapReadView
:
MapReadyView
?,
enable
:
Boolean
)
{
// 根据不同的地图类型设置对应的旋转手势可用状态
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
mapReadView
?.
fMapView
?.
uiSettings
?.
isRotateGesturesEnabled
=
enable
mapReadView
?.
fMapView
?.
uiSettings
?.
isRotateGesturesEnabled
=
enable
...
@@ -41,11 +43,13 @@ object MSGestures {
...
@@ -41,11 +43,13 @@ object MSGestures {
}
}
/***倾斜开关
/**
* @param mapReadView 从addMapRenderCallback(object : OnMapReadyLis 里拿
* 设置地图倾斜手势功能的启用状态
* @param enable 是否可用
* @param mapReadView 地图准备就绪视图对象
* **/
* @param enable 是否启用倾斜手势功能,true为启用,false为禁用
* */
fun
setTiltGesturesEnabled
(
mapReadView
:
MapReadyView
,
enable
:
Boolean
)
{
fun
setTiltGesturesEnabled
(
mapReadView
:
MapReadyView
,
enable
:
Boolean
)
{
// 根据不同的地图类型设置对应的倾斜手势功能
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
mapReadView
.
fMapView
?.
uiSettings
?.
isTiltGesturesEnabled
=
enable
mapReadView
.
fMapView
?.
uiSettings
?.
isTiltGesturesEnabled
=
enable
...
@@ -57,4 +61,5 @@ object MSGestures {
...
@@ -57,4 +61,5 @@ object MSGestures {
}
}
}
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/core/MSGpsLocation.kt
View file @
f8483b51
package
com.sd.maplibrary.core
package
com.sd.maplibrary.core
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.content.Context
import
android.os.Bundle
import
android.os.Bundle
import
com.amap.api.location.AMapLocation
import
com.amap.api.location.AMapLocation
import
com.amap.api.location.AMapLocationClient
import
com.amap.api.location.AMapLocationClient
...
@@ -16,10 +15,10 @@ import com.minedata.minenavi.location.MineLocationOptions
...
@@ -16,10 +15,10 @@ import com.minedata.minenavi.location.MineLocationOptions
import
com.minedata.minenavi.mapdal.CoordType
import
com.minedata.minenavi.mapdal.CoordType
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.UserCtx
import
com.sd.maplibrary.bean.MSLocBean
import
com.sd.maplibrary.bean.MSLocBean
/**GPS定位类*/
/******/
object
MSGpsLocation
{
object
MSGpsLocation
{
...
@@ -51,14 +50,17 @@ object MSGpsLocation {
...
@@ -51,14 +50,17 @@ object MSGpsLocation {
return
@lazy
mOption
return
@lazy
mOption
}
}
// 高德定位实例
@SuppressLint
(
"StaticFieldLeak"
)
private
var
alocationClient
:
AMapLocationClient
?
=
null
private
var
locationClient
:
AMapLocationClient
?
=
null
/**业务层Gps定位回调**/
/****业务层Gps定位回调**/
private
var
onMsGpsLoc
:
OnMsGpsLoc
?
=
null
private
var
onMsGpsLoc
:
OnMsGpsLoc
?
=
null
/***初始化监听定位**/
/**初始化定位*/
fun
initLoc
(
context
:
Context
)
{
fun
initLoc
()
{
var
context
=
UserCtx
.
instance
.
mContext
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
MineLocationManager
.
getInstance
()
MineLocationManager
.
getInstance
()
...
@@ -69,23 +71,25 @@ object MSGpsLocation {
...
@@ -69,23 +71,25 @@ object MSGpsLocation {
}
}
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
locationClient
=
AMapLocationClient
(
context
)
a
locationClient
=
AMapLocationClient
(
context
)
//设置定位参数
//设置定位参数
locationClient
!!
.
setLocationOption
(
locationOption
)
a
locationClient
!!
.
setLocationOption
(
locationOption
)
// 设置定位监听
// 设置定位监听
locationClient
!!
.
setLocationListener
(
locationListener
)
a
locationClient
!!
.
setLocationListener
(
locationListener
)
}
}
}
}
}
}
/**
* 设置GPS定位回调监听器
* @param onMsGpsLoc GPS定位回调监听器实例
*/
fun
setOnMsGpsLoc
(
onMsGpsLoc
:
OnMsGpsLoc
)
{
fun
setOnMsGpsLoc
(
onMsGpsLoc
:
OnMsGpsLoc
)
{
this
.
onMsGpsLoc
=
onMsGpsLoc
this
.
onMsGpsLoc
=
onMsGpsLoc
}
}
/***
/**开启定位*/
* 开启定位
*/
fun
starLoc
()
{
fun
starLoc
()
{
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
...
@@ -98,12 +102,12 @@ object MSGpsLocation {
...
@@ -98,12 +102,12 @@ object MSGpsLocation {
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
//启动定位
//启动定位
locationClient
?.
startLocation
()
a
locationClient
?.
startLocation
()
}
}
}
}
}
}
/**
**
停止定位*
**
/
/**停止定位*/
fun
stopLoc
()
{
fun
stopLoc
()
{
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
...
@@ -112,28 +116,29 @@ object MSGpsLocation {
...
@@ -112,28 +116,29 @@ object MSGpsLocation {
}
}
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
locationClient
?.
stopLocation
()
a
locationClient
?.
stopLocation
()
}
}
}
}
}
}
/**
**
清理资源**
*
/
/**清理
定位
资源**/
fun
cleans
()
{
fun
cleans
Loc
()
{
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
MineLocationManager
.
getInstance
().
cleanup
()
MineLocationManager
.
getInstance
().
cleanup
()
}
}
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
locationClient
?.
onDestroy
()
a
locationClient
?.
onDestroy
()
locationClient
=
null
a
locationClient
=
null
}
}
}
}
}
}
//----------------自定义回调---------
//----------------自定义回调---------
/**业务层Gps定位回调接口**/
interface
OnMsGpsLoc
{
interface
OnMsGpsLoc
{
fun
onMsGpsLoc
(
mSLocBean
:
MSLocBean
)
fun
onMsGpsLoc
(
mSLocBean
:
MSLocBean
)
}
}
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSLayers.kt
View file @
f8483b51
...
@@ -6,12 +6,18 @@ import com.minedata.minenavi.mapdal.CoordType
...
@@ -6,12 +6,18 @@ import com.minedata.minenavi.mapdal.CoordType
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.MSDKInitializer
/**
* 地图图层切换
*
*/
object
MSLayers
{
object
MSLayers
{
/****切换地图图层
* @param type =1 普通 2=卫星
/**
* ***/
* 切换地图图层
* @param mapReadView 地图准备就绪视图对象
* @param type 1=普通 2=卫星
*/
fun
changeLayers
(
mapReadView
:
MapReadyView
?,
type
:
Int
)
{
fun
changeLayers
(
mapReadView
:
MapReadyView
?,
type
:
Int
)
{
if
(
MSDKInitializer
.
getMapType
()
==
MAP_TYPE
.
MINE
)
{
if
(
MSDKInitializer
.
getMapType
()
==
MAP_TYPE
.
MINE
)
{
when
(
type
)
{
when
(
type
)
{
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSLocationStyle.kt
View file @
f8483b51
...
@@ -5,28 +5,31 @@ import com.sd.maplibrary.MAP_TYPE
...
@@ -5,28 +5,31 @@ import com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.MSDKInitializer
import
com.amap.api.maps.model.MyLocationStyle
as
aMapMyLocationStyle
import
com.amap.api.maps.model.MyLocationStyle
as
aMapMyLocationStyle
/***显示定位小圆点**/
/**
* 显示定位小圆点
*/
object
MSLocationStyle
{
object
MSLocationStyle
{
// const val LOCATION_TYPE_EXTERNAL: Int = 0
// const val LOCATION_TYPE_EXTERNAL: Int = 0
// const val LOCATION_TYPE_SHOW: Int = 1
// const val LOCATION_TYPE_SHOW: Int = 1
/**
*
定位一次,且将视角移动到地图中心点**/
/**定位一次,且将视角移动到地图中心点**/
const
val
LOCATION_TYPE_LOCATE
:
Int
=
2
const
val
LOCATION_TYPE_LOCATE
:
Int
=
2
/**连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动**/
/**连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动**/
const
val
LOCATION_TYPE_FOLLOW
:
Int
=
3
const
val
LOCATION_TYPE_FOLLOW
:
Int
=
3
/**
*
连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动**/
/**连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动**/
const
val
LOCATION_TYPE_MAP_ROTATE
:
Int
=
4
const
val
LOCATION_TYPE_MAP_ROTATE
:
Int
=
4
/**
*
连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动**/
/**连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动**/
const
val
LOCATION_TYPE_LOCATION_ROTATE
:
Int
=
5
const
val
LOCATION_TYPE_LOCATION_ROTATE
:
Int
=
5
/**
*
连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动**/
/**连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动**/
const
val
LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER
:
Int
=
6
const
val
LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER
:
Int
=
6
/**
*
连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动**/
/**连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动**/
const
val
LOCATION_TYPE_FOLLOW_NO_CENTER
:
Int
=
7
const
val
LOCATION_TYPE_FOLLOW_NO_CENTER
:
Int
=
7
/**
*
连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动**/
/**连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动**/
const
val
LOCATION_TYPE_MAP_ROTATE_NO_CENTER
:
Int
=
8
const
val
LOCATION_TYPE_MAP_ROTATE_NO_CENTER
:
Int
=
8
private
var
styleMap
=
mapOf
(
// 高德定位类型
private
var
styleAMap
=
mapOf
(
LOCATION_TYPE_LOCATE
to
aMapMyLocationStyle
.
LOCATION_TYPE_LOCATE
,
LOCATION_TYPE_LOCATE
to
aMapMyLocationStyle
.
LOCATION_TYPE_LOCATE
,
LOCATION_TYPE_FOLLOW
to
aMapMyLocationStyle
.
LOCATION_TYPE_FOLLOW
,
LOCATION_TYPE_FOLLOW
to
aMapMyLocationStyle
.
LOCATION_TYPE_FOLLOW
,
LOCATION_TYPE_MAP_ROTATE
to
aMapMyLocationStyle
.
LOCATION_TYPE_MAP_ROTATE
,
LOCATION_TYPE_MAP_ROTATE
to
aMapMyLocationStyle
.
LOCATION_TYPE_MAP_ROTATE
,
...
@@ -42,6 +45,11 @@ object MSLocationStyle {
...
@@ -42,6 +45,11 @@ object MSLocationStyle {
//高德初始化定位蓝点样式类
//高德初始化定位蓝点样式类
private
val
aMyLocationStyle
by
lazy
{
aMapMyLocationStyle
()
}
private
val
aMyLocationStyle
by
lazy
{
aMapMyLocationStyle
()
}
/**
* 设置定位蓝点样式
* @param mapReadView 地图准备就绪视图对象
* @param type 定位类型,默认为LOCATION_TYPE_LOCATION_ROTATE,表示连续定位并旋转视角
*/
fun
setLocationStyle
(
mapReadView
:
MapReadyView
?,
type
:
Int
=
LOCATION_TYPE_LOCATION_ROTATE
)
{
fun
setLocationStyle
(
mapReadView
:
MapReadyView
?,
type
:
Int
=
LOCATION_TYPE_LOCATION_ROTATE
)
{
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
...
@@ -59,7 +67,7 @@ object MSLocationStyle {
...
@@ -59,7 +67,7 @@ object MSLocationStyle {
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
var
aMap
=
mapReadView
?.
aMap
var
aMap
=
mapReadView
?.
aMap
aMyLocationStyle
.
myLocationType
(
styleMap
.
get
(
type
)
!!
)
aMyLocationStyle
.
myLocationType
(
style
A
Map
.
get
(
type
)
!!
)
aMyLocationStyle
.
interval
(
2000
)
//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
aMyLocationStyle
.
interval
(
2000
)
//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
aMap
?.
setMyLocationEnabled
(
true
)
// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
aMap
?.
setMyLocationEnabled
(
true
)
// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSMethodAdv.kt
View file @
f8483b51
...
@@ -9,12 +9,16 @@ import com.sd.maplibrary.MSDKInitializer
...
@@ -9,12 +9,16 @@ import com.sd.maplibrary.MSDKInitializer
import
com.amap.api.maps.model.LatLng
as
ALatLng
import
com.amap.api.maps.model.LatLng
as
ALatLng
/****地图方法交互**/
/**
* 地图方法交互
*/
object
MSMethodAdv
{
object
MSMethodAdv
{
/****改变地图中心点
/****
* @param lat 维度
* 改变地图中心点
* @param lng 经度
* @param mapReadView 地图准备就绪的视图对象,可能为null
* @param lat 纬度,默认值为39.977290
* @param lng 经度,默认值为116.337000
* **/
* **/
fun
setMapCenter
(
fun
setMapCenter
(
mapReadView
:
MapReadyView
?,
mapReadView
:
MapReadyView
?,
...
@@ -22,11 +26,13 @@ object MSMethodAdv {
...
@@ -22,11 +26,13 @@ object MSMethodAdv {
lng
:
Double
=
116.337000
lng
:
Double
=
116.337000
)
{
)
{
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
// 处理自定义地图类型
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
val
point
=
Tools
.
latLngToPoint
(
LatLng
(
lat
,
lng
))
val
point
=
Tools
.
latLngToPoint
(
LatLng
(
lat
,
lng
))
mapReadView
?.
mMineMap
?.
setPointToCenter
(
point
.
x
,
point
.
y
)
mapReadView
?.
mMineMap
?.
setPointToCenter
(
point
.
x
,
point
.
y
)
}
}
// 处理高德地图类型
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
//参数依次是:视角调整区域的中心点坐标、希望调整到的缩放级别、俯仰角0°~45°(垂直与地图时为0)、偏航角 0~360° (正北方为0)
//参数依次是:视角调整区域的中心点坐标、希望调整到的缩放级别、俯仰角0°~45°(垂直与地图时为0)、偏航角 0~360° (正北方为0)
val
mCameraUpdate
=
CameraUpdateFactory
.
newCameraPosition
(
val
mCameraUpdate
=
CameraUpdateFactory
.
newCameraPosition
(
...
@@ -37,10 +43,14 @@ object MSMethodAdv {
...
@@ -37,10 +43,14 @@ object MSMethodAdv {
}
}
}
}
/****改变地图缩放级别
* @param zoom 越小站得越高
/**
* **/
* 改变地图缩放级别
* @param mapReadView 地图准备就绪的视图对象
* @param zoom 缩放级别,值越小站得越高,默认值为13f
* */
fun
setMapZoom
(
mapReadView
:
MapReadyView
?,
zoom
:
Float
=
13f
)
{
fun
setMapZoom
(
mapReadView
:
MapReadyView
?,
zoom
:
Float
=
13f
)
{
// 根据不同的地图类型设置对应的缩放级别
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
mapReadView
?.
mMineMap
?.
setZoomLevel
(
zoom
)
mapReadView
?.
mMineMap
?.
setZoomLevel
(
zoom
)
...
@@ -53,8 +63,14 @@ object MSMethodAdv {
...
@@ -53,8 +63,14 @@ object MSMethodAdv {
}
}
}
}
/***获取地图缩放级别**/
/**
* 获取地图缩放级别
* @param mapReadView 地图准备就绪视图对象
* @return 返回当前地图的缩放级别,如果地图未初始化则返回0f
*/
fun
getMapZoom
(
mapReadView
:
MapReadyView
?):
Float
{
fun
getMapZoom
(
mapReadView
:
MapReadyView
?):
Float
{
// 根据不同的地图类型获取对应的缩放级别
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
return
mapReadView
?.
mMineMap
?.
zoomLevel
?:
0f
return
mapReadView
?.
mMineMap
?.
zoomLevel
?:
0f
...
@@ -68,6 +84,7 @@ object MSMethodAdv {
...
@@ -68,6 +84,7 @@ object MSMethodAdv {
}
}
/***设置地图显示区域**/
/***设置地图显示区域**/
// fun setMapBoundArea(mapReadView: MapReadyView?) {
// fun setMapBoundArea(mapReadView: MapReadyView?) {
// when (MSDKInitializer.getMapType()) {
// when (MSDKInitializer.getMapType()) {
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSPoiSearch.kt
View file @
f8483b51
...
@@ -15,6 +15,7 @@ import com.amap.api.services.core.LatLonPoint as ALatLonPoint
...
@@ -15,6 +15,7 @@ import com.amap.api.services.core.LatLonPoint as ALatLonPoint
import
com.amap.api.services.poisearch.PoiResult
as
APoiResult
import
com.amap.api.services.poisearch.PoiResult
as
APoiResult
import
com.amap.api.services.poisearch.PoiSearch
as
APoiSearch
import
com.amap.api.services.poisearch.PoiSearch
as
APoiSearch
import
com.amap.api.services.poisearch.PoiSearch.SearchBound
import
com.amap.api.services.poisearch.PoiSearch.SearchBound
import
com.sd.maplibrary.UserCtx
/****Poi 搜索相关**/
/****Poi 搜索相关**/
object
MSPoiSearch
:
PoiSearch
.
OnPoiSearchListener
,
APoiSearch
.
OnPoiSearchListener
{
object
MSPoiSearch
:
PoiSearch
.
OnPoiSearchListener
,
APoiSearch
.
OnPoiSearchListener
{
...
@@ -22,46 +23,33 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
...
@@ -22,46 +23,33 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
private
var
onMSPoiSearchLis
:
OnMSPoiSearchLis
?
=
null
private
var
onMSPoiSearchLis
:
OnMSPoiSearchLis
?
=
null
//
//四维搜索对象
//四维搜索对象
// private var poiSearch: PoiSearch? = null
// private var poiSearch: PoiSearch? = null
// //
//搜索接口回调
interface
OnMSPoiSearchLis
{
interface
OnMSPoiSearchLis
{
/**
*
/**
* 搜索返回
* 搜索返回
* @param poiList 返回列表
* @param poiList 返回列表
* @param resCode 1=成功 0=失败
*/
* ***/
fun
onPoiLis
(
poiList
:
List
<
PoiSearchRes
>)
fun
onPoiLis
(
poiList
:
List
<
PoiSearchRes
>,
resCode
:
Int
)
}
}
/***搜索初始化**/
private
fun
initSearch
(
context
:
Context
)
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
// poiSearch = PoiSearch(context)
}
MAP_TYPE
.
AMAP
->
{
/**关键字搜索
}
}
}
/***关键字搜索
* @param keyWord 关键字
* @param keyWord 关键字
* @param lat 当期维度
* @param lat 当期维度
* @param lng 当期经度
* @param lng 当期经度
* @param onMSPoiSearchLis 回调
* @param onMSPoiSearchLis
搜索
回调
*
***
/
*/
fun
startPoiSearch
(
fun
startPoiSearch
(
context
:
Context
,
keyWord
:
String
,
keyWord
:
String
,
lat
:
Double
=
41.80196
,
lat
:
Double
=
41.80196
,
lng
:
Double
=
123.43326
,
lng
:
Double
=
123.43326
,
onMSPoiSearchLis
:
OnMSPoiSearchLis
onMSPoiSearchLis
:
OnMSPoiSearchLis
)
{
)
{
this
.
onMSPoiSearchLis
=
onMSPoiSearchLis
this
.
onMSPoiSearchLis
=
onMSPoiSearchLis
var
context
=
UserCtx
.
instance
.
mContext
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
val
poiSearch
=
PoiSearch
(
context
)
val
poiSearch
=
PoiSearch
(
context
)
...
@@ -98,16 +86,14 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
...
@@ -98,16 +86,14 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
}
}
}
}
/**
**
周边搜索
/**周边搜索
* @param keyWord 关键字
* @param keyWord 关键字
* @param lat 当
期
维度
* @param lat 当
前
维度
* @param lng 当
期
经度
* @param lng 当
前
经度
* @param radios 搜索半径(单位 米)
* @param radios 搜索半径(单位 米)
* @param onMSPoiSearchLis 回调
* @param onMSPoiSearchLis 回调
*/
* **/
fun
startPoiSearchBound
(
fun
startPoiSearchBound
(
context
:
Context
,
keyWord
:
String
,
keyWord
:
String
,
lat
:
Double
,
lat
:
Double
,
lng
:
Double
,
lng
:
Double
,
...
@@ -115,6 +101,7 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
...
@@ -115,6 +101,7 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
onMSPoiSearchLis
:
OnMSPoiSearchLis
onMSPoiSearchLis
:
OnMSPoiSearchLis
)
{
)
{
this
.
onMSPoiSearchLis
=
onMSPoiSearchLis
this
.
onMSPoiSearchLis
=
onMSPoiSearchLis
var
context
=
UserCtx
.
instance
.
mContext
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
val
poiSearch
=
PoiSearch
(
context
)
val
poiSearch
=
PoiSearch
(
context
)
...
@@ -182,9 +169,9 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
...
@@ -182,9 +169,9 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
adCode
=
pos
.
adCode
adCode
=
pos
.
adCode
}
}
}
}
onMSPoiSearchLis
?.
onPoiLis
(
poiList
,
1
)
onMSPoiSearchLis
?.
onPoiLis
(
poiList
)
}
else
{
}
else
{
onMSPoiSearchLis
?.
onPoiLis
(
listOf
()
,
0
)
onMSPoiSearchLis
?.
onPoiLis
(
listOf
())
}
}
}
}
...
@@ -207,10 +194,10 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
...
@@ -207,10 +194,10 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
adCode
=
pos
.
adCode
adCode
=
pos
.
adCode
}
}
}
}
onMSPoiSearchLis
?.
onPoiLis
(
poiList
,
1
)
onMSPoiSearchLis
?.
onPoiLis
(
poiList
)
}
}
}
else
{
}
else
{
onMSPoiSearchLis
?.
onPoiLis
(
listOf
()
,
0
)
onMSPoiSearchLis
?.
onPoiLis
(
listOf
())
}
}
}
}
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSRegeoCode.kt
View file @
f8483b51
package
com.sd.maplibrary.core
package
com.sd.maplibrary.core
import
android.content.Context
import
com.amap.api.services.core.AMapException
import
com.minedata.minenavi.poiquery.GeocodeResult
import
com.minedata.minenavi.poiquery.GeocodeResult
import
com.minedata.minenavi.poiquery.GeocodeSearch
import
com.minedata.minenavi.poiquery.GeocodeSearch
import
com.minedata.minenavi.poiquery.LatLonPoint
import
com.minedata.minenavi.poiquery.LatLonPoint
...
@@ -8,29 +8,29 @@ import com.minedata.minenavi.poiquery.RegeocodeQuery
...
@@ -8,29 +8,29 @@ import com.minedata.minenavi.poiquery.RegeocodeQuery
import
com.minedata.minenavi.poiquery.RegeocodeResult
import
com.minedata.minenavi.poiquery.RegeocodeResult
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.UserCtx
import
com.sd.maplibrary.bean.RegeocodeRes
import
com.sd.maplibrary.bean.RegeocodeRes
import
com.amap.api.services.geocoder.RegeocodeQuery
as
ARegeocodeQuery
import
com.amap.api.services.core.LatLonPoint
as
ALatLonPoint
import
com.amap.api.services.core.LatLonPoint
as
ALatLonPoint
import
com.amap.api.services.geocoder.GeocodeSearch
as
AGeocodeSearch
import
com.amap.api.services.geocoder.GeocodeSearch
as
AGeocodeSearch
import
com.amap.api.services.geocoder.RegeocodeQuery
as
ARegeocodeQuery
import
com.amap.api.services.geocoder.RegeocodeResult
as
ARegeocodeResult
import
com.amap.api.services.geocoder.RegeocodeResult
as
ARegeocodeResult
import
com.amap.api.services.core.AMapException
/**
*
逆地理编码*
*
/
/**逆地理编码*/
object
MSRegeoCode
:
GeocodeSearch
.
OnGeocodeSearchListener
,
AGeocodeSearch
.
OnGeocodeSearchListener
{
object
MSRegeoCode
:
GeocodeSearch
.
OnGeocodeSearchListener
,
AGeocodeSearch
.
OnGeocodeSearchListener
{
private
var
mSOnRegeo
:
MSOnRegeo
?
=
null
private
var
mSOnRegeo
:
MSOnRegeo
?
=
null
/**逆地理编码信息回调*/
interface
MSOnRegeo
{
interface
MSOnRegeo
{
fun
onRegeo
(
regeocodeRes
:
RegeocodeRes
?)
fun
onRegeo
(
regeocodeRes
:
RegeocodeRes
?)
}
}
/**
**
逆地理编码
/**逆地理编码
* @param lat 维度
* @param lat 维度
* @param lng 经度
* @param lng 经度
* @param msOnRegeo 信息回调
* @param msOnRegeo 信息回调
*
***
/
*/
fun
geoCoder
(
fun
geoCoder
(
context
:
Context
,
lat
:
Double
,
lat
:
Double
,
lng
:
Double
,
lng
:
Double
,
msOnRegeo
:
MSOnRegeo
msOnRegeo
:
MSOnRegeo
...
@@ -38,6 +38,7 @@ object MSRegeoCode : GeocodeSearch.OnGeocodeSearchListener, AGeocodeSearch.OnGeo
...
@@ -38,6 +38,7 @@ object MSRegeoCode : GeocodeSearch.OnGeocodeSearchListener, AGeocodeSearch.OnGeo
if
(
lat
==
0.0
||
lng
==
0.0
)
if
(
lat
==
0.0
||
lng
==
0.0
)
return
return
this
.
mSOnRegeo
=
msOnRegeo
this
.
mSOnRegeo
=
msOnRegeo
var
context
=
UserCtx
.
instance
.
mContext
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
val
geocoderSearch
=
GeocodeSearch
(
context
)
val
geocoderSearch
=
GeocodeSearch
(
context
)
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSRoutePlans.kt
View file @
f8483b51
...
@@ -9,8 +9,10 @@ import com.amap.api.navi.AmapNaviPage
...
@@ -9,8 +9,10 @@ import com.amap.api.navi.AmapNaviPage
import
com.amap.api.navi.AmapNaviParams
import
com.amap.api.navi.AmapNaviParams
import
com.amap.api.navi.AmapNaviType
import
com.amap.api.navi.AmapNaviType
import
com.amap.api.navi.AmapPageType
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.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.minedata.minenavi.map.Route
import
com.minedata.minenavi.map.Route
import
com.minedata.minenavi.map.RouteOptions
import
com.minedata.minenavi.map.RouteOptions
...
@@ -26,6 +28,7 @@ import com.minedata.minenavi.navi.RouterErrorInfo
...
@@ -26,6 +28,7 @@ import com.minedata.minenavi.navi.RouterErrorInfo
import
com.minedata.minenavi.util.Tools
import
com.minedata.minenavi.util.Tools
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.UserCtx
import
com.sd.maplibrary.bean.DriverRouteBean
import
com.sd.maplibrary.bean.DriverRouteBean
import
com.sd.maplibrary.bean.MSLatLng
import
com.sd.maplibrary.bean.MSLatLng
import
com.sd.maplibrary.bean.WayPoi
import
com.sd.maplibrary.bean.WayPoi
...
@@ -61,19 +64,20 @@ object MSRoutePlans {
...
@@ -61,19 +64,20 @@ object MSRoutePlans {
*/
*/
private
var
mRoute
:
Route
?
=
null
private
var
mRoute
:
Route
?
=
null
/**
//高德保存当前算好的路线
* 高德保存当前算好的路线
*/
private
var
routeOverlay
:
RouteOverLay
?
=
null
private
var
routeOverlay
:
RouteOverLay
?
=
null
// private val routeOverlays: SparseArray<RouteOverLay> = SparseArray<RouteOverLay>()
// private val routeOverlays: SparseArray<RouteOverLay> = SparseArray<RouteOverLay>()
/****设置监听
/**
* @param context
* 添加导航路线规划监听
* @param 接口
* @param onDriveRoute 导航路线回调接口
* **/
*/
fun
addPlanLis
(
context
:
Context
,
onDriveRoute
:
OnDriveRoute
)
{
fun
addPlanLis
(
onDriveRoute
:
OnDriveRoute
)
{
var
context
=
UserCtx
.
instance
.
mContext
this
.
onDriveRoute
=
onDriveRoute
this
.
onDriveRoute
=
onDriveRoute
// 根据地图类型初始化不同的导航引擎
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
mNaviSession
=
NaviSession
.
getInstance
()
mNaviSession
=
NaviSession
.
getInstance
()
...
@@ -100,20 +104,22 @@ object MSRoutePlans {
...
@@ -100,20 +104,22 @@ object MSRoutePlans {
}
}
}
}
/***驾车路径规划,直接跳转到 导航页面
*@param starPoint 起点坐标
/**驾车路径规划
* @param starPoint 起点坐标
* @param endPoint 终点坐标
* @param endPoint 终点坐标
* @param ways 途经点集合
* @param ways 途经点集合
* @param endName 终点名称(高德可不传)
* @param endName 终点名称(高德可不传)
* ***/
* @param startName 起点名称
*/
fun
drivingPathPlanning
(
fun
drivingPathPlanning
(
context
:
Context
,
starPoint
:
MSLatLng
,
starPoint
:
MSLatLng
,
endPoint
:
MSLatLng
,
endPoint
:
MSLatLng
,
ways
:
List
<
WayPoi
>,
ways
:
List
<
WayPoi
>,
endName
:
String
=
""
,
endName
:
String
=
""
,
startName
:
String
=
"当前位置"
startName
:
String
=
"当前位置"
)
{
)
{
var
context
=
UserCtx
.
instance
.
mContext
when
(
MSDKInitializer
.
getMapType
())
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MAP_TYPE
.
MINE
->
{
val
starPoint
=
Tools
.
latLngToPoint
(
LatLng
(
starPoint
.
lat
,
starPoint
.
lng
))
val
starPoint
=
Tools
.
latLngToPoint
(
LatLng
(
starPoint
.
lat
,
starPoint
.
lng
))
...
@@ -143,95 +149,106 @@ object MSRoutePlans {
...
@@ -143,95 +149,106 @@ object MSRoutePlans {
MAP_TYPE
.
AMAP
->
{
MAP_TYPE
.
AMAP
->
{
//这是路径规划
//这是路径规划
// 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 endList = listOf<NaviLatLng>(endLatlng)
// var wayPoints = listOf<NaviLatLng>()
//
// mAMapNavi?.calculateDriveRoute(
// startList,
// endList,
// wayPoints,
// PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT
// )
var
endLatlng
=
NaviLatLng
(
endPoint
.
lat
,
endPoint
.
lng
)
var
endList
=
listOf
<
NaviLatLng
>(
endLatlng
)
//途经点
//途经点
var
poiList
=
mutableListOf
<
Poi
>()
var
wayPoints
=
mutableListOf
<
NaviLatLng
>()
if
(
ways
.
count
()
>
0
)
{
if
(
ways
.
count
()
>
0
)
{
ways
.
forEach
{
wpoi
->
ways
.
forEach
{
wpoi
->
poiList
.
add
(
Poi
(
"鸟巢"
,
A
LatLng
(
wpoi
.
passPoint
!!
.
lat
,
wpoi
.
passPoint
!!
.
lng
)
,
""
)
)
wayPoints
.
add
(
Navi
LatLng
(
wpoi
.
passPoint
!!
.
lat
,
wpoi
.
passPoint
!!
.
lng
))
}
}
}
}
//这是导航,直接到高德内置组件
mAMapNavi
?.
calculateDriveRoute
(
val
params
=
AmapNaviParams
(
startList
,
Poi
(
startName
,
ALatLng
(
starPoint
.
lat
,
starPoint
.
lng
),
""
),
endList
,
poiList
,
wayPoints
,
Poi
(
endName
,
ALatLng
(
endPoint
.
lat
,
endPoint
.
lng
),
""
),
PathPlanningStrategy
.
DRIVING_MULTIPLE_ROUTES_DEFAULT
AmapNaviType
.
DRIVER
,
AmapPageType
.
ROUTE
)
)
params
.
setUseInnerVoice
(
true
)
AmapNaviPage
.
getInstance
()
//这是导航,直接到高德内置组件
.
showRouteActivity
(
context
,
params
,
null
)
//途经点
/* 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)*/
}
}
}
}
}
}
/
/
自定义驾车路线返回
/
**
自定义驾车路线返回
*/
interface
OnDriveRoute
{
interface
OnDriveRoute
{
fun
onDriverRoute
(
driverRouteBean
:
DriverRouteBean
)
fun
onDriverRoute
(
driverRouteBean
:
DriverRouteBean
)
}
}
/***绘制路径规划
* @param driverRB 算路结果回调
/**
* ***/
* 绘制规划的路线路径。
fun
drawPlanPath
(
* @param mapReadView 地图视图容器,用于获取当前地图实例。
mapReadView
:
MapReadyView
?,
* @param driverRB 包含路线信息的数据对象。
driverRB
:
DriverRouteBean
,
*/
context
:
Context
fun
drawPlanPath
(
)
{
mapReadView
:
MapReadyView
?,
when
(
MSDKInitializer
.
getMapType
())
{
driverRB
:
DriverRouteBean
MAP_TYPE
.
MINE
->
{
)
{
if
(
mRoute
!=
null
)
{
var
context
=
UserCtx
.
instance
.
mContext
mapReadView
?.
mMineMap
?.
removeOverlay
(
mRoute
)
when
(
MSDKInitializer
.
getMapType
())
{
mRoute
=
null
MAP_TYPE
.
MINE
->
{
}
// 移除旧的路线覆盖物
var
routeBase
=
driverRB
.
routeCollection
?.
routes
?.
get
(
0
)
if
(
mRoute
!=
null
)
{
val
options
=
RouteOptions
()
mapReadView
?.
mMineMap
?.
removeOverlay
(
mRoute
)
.
routeBase
(
routeBase
)
mRoute
=
null
.
colorType
(
Route
.
RouteColorType
.
enrouteTi
)
// .colorType(Route.RouteColorType.none)
.
styleClass
(
"DEFAULT"
)
mRoute
=
mapReadView
?.
mMineMap
?.
addRoute
(
options
)
setRouteOverlayStyle
(
mRoute
,
false
)
navEndFitWorldAreaToRect
(
mapReadView
,
routeBase
)
}
}
MAP_TYPE
.
AMAP
->
{
// 获取第一条路线数据并设置路线绘制选项
// mapReadView?.aMap?.clear()
var
routeBase
=
driverRB
.
routeCollection
?.
routes
?.
get
(
0
)
//清空上次计算的路径列表。
val
options
=
RouteOptions
()
if
(
routeOverlay
!=
null
)
{
.
routeBase
(
routeBase
)
routeOverlay
?.
removeFromMap
()
.
colorType
(
Route
.
RouteColorType
.
enrouteTi
)
routeOverlay
=
null
.
styleClass
(
"DEFAULT"
)
}
// routeOverlays.clear()
// 添加新的路线到地图上,并设置样式和视角适配
val
routeIds
=
driverRB
.
aMapCalcRouteResult
!!
.
getRouteid
()
mRoute
=
mapReadView
?.
mMineMap
?.
addRoute
(
options
)
val
paths
:
HashMap
<
Int
,
AMapNaviPath
>
=
mAMapNavi
!!
.
getNaviPaths
()
setRouteOverlayStyle
(
mRoute
,
false
)
val
path
:
AMapNaviPath
?
=
paths
.
get
(
routeIds
[
0
])
navEndFitWorldAreaToRect
(
mapReadView
,
routeBase
)
if
(
path
!=
null
)
{
}
// drawRoutes(routeIds[i], path, mapReadView,context)
mapReadView
?.
aMap
?.
moveCamera
(
CameraUpdateFactory
.
changeTilt
(
0f
))
MAP_TYPE
.
AMAP
->
{
routeOverlay
=
RouteOverLay
(
mapReadView
?.
aMap
,
path
,
context
)
// 清除之前的路线覆盖物
routeOverlay
?.
setTrafficLine
(
false
)
if
(
routeOverlay
!=
null
)
{
routeOverlay
?.
addToMap
()
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(
// private fun drawRoutes(
// routeId: Int,
// routeId: Int,
...
...
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