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

对照代码写文档

parent aa564e16
...@@ -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
...@@ -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")
......
...@@ -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" />
......
...@@ -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
...@@ -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() }
......
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
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
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
...@@ -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 = ""
//逆地理编码返回的所在村镇。 //逆地理编码返回的所在村镇。
......
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
...@@ -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 MSCalcuMapUtil {
/***计算俩点距离 /**
* @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
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 -> {
......
...@@ -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
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) alocationClient = AMapLocationClient(context)
//设置定位参数 //设置定位参数
locationClient!!.setLocationOption(locationOption) alocationClient!!.setLocationOption(locationOption)
// 设置定位监听 // 设置定位监听
locationClient!!.setLocationListener(locationListener) alocationClient!!.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() alocationClient?.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() alocationClient?.stopLocation()
} }
} }
} }
/****清理资源***/ /**清理定位资源**/
fun cleans() { fun cleansLoc() {
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() alocationClient?.onDestroy()
locationClient = null alocationClient = null
} }
} }
} }
//----------------自定义回调--------- //----------------自定义回调---------
/**业务层Gps定位回调接口**/
interface OnMsGpsLoc { interface OnMsGpsLoc {
fun onMsGpsLoc(mSLocBean: MSLocBean) fun onMsGpsLoc(mSLocBean: MSLocBean)
} }
......
...@@ -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) {
......
...@@ -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(styleAMap.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。
......
...@@ -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()) {
......
...@@ -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())
} }
} }
......
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)
......
...@@ -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("鸟巢", ALatLng(wpoi.passPoint!!.lat, wpoi.passPoint!!.lng), "")) wayPoints.add(NaviLatLng(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,
......
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