Commit 1fced44e authored by p x's avatar p x
Browse files

不让用户传入mapreadyView

parent aeb35fb4
...@@ -61,7 +61,7 @@ object MineGpsLocation { ...@@ -61,7 +61,7 @@ object MineGpsLocation {
override fun onLocationChanged(location: MineLocation?) { override fun onLocationChanged(location: MineLocation?) {
// println("-------四维定位改变 = ${location?.latitude} curLng=${location?.longitude} speed=${location?.speed}") // println("-------四维定位改变 = ${location?.latitude} curLng=${location?.longitude} speed=${location?.speed}")
var loc = MSLocCb.Companion.instance.apply { var loc = MSLocCb.instance.apply {
lat = location?.latitude ?: 0.0 lat = location?.latitude ?: 0.0
lng = location?.longitude ?: 0.0 lng = location?.longitude ?: 0.0
speed = location?.speed ?: 0f speed = location?.speed ?: 0f
......
...@@ -9,7 +9,7 @@ import com.sd.api.maps.cdata.MSMarker ...@@ -9,7 +9,7 @@ import com.sd.api.maps.cdata.MSMarker
/** /**
* 删除地图上的绘制 * 删除地图上的绘制
*/ */
object DelDrawInMap { object DelDrawInMap : MsOperationParent() {
/** /**
...@@ -71,46 +71,46 @@ object DelDrawInMap { ...@@ -71,46 +71,46 @@ object DelDrawInMap {
* @param isDotted 是否为虚线,默认为false * @param isDotted 是否为虚线,默认为false
* @return MSOverlay 覆盖物对象 * @return MSOverlay 覆盖物对象
*/ */
/* fun drawPolyline( /* fun drawPolyline(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>, msLatLng: List<MSLatLng>,
width: Float = 10f, width: Float = 10f,
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)
} }
var options = PolylineOptions() var options = PolylineOptions()
// 添加顶点坐标 // 添加顶点坐标
.addAll(latLngs) .addAll(latLngs)
.width(width) .width(width)
.color(fcolor) .color(fcolor)
.setDottedLine(isDotted) .setDottedLine(isDotted)
var polyline = mapReadView?.mMineMap?.addPolyline(options) var polyline = mapReadView?.mMineMap?.addPolyline(options)
MSOverlay.polyline = 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)
} }
val aOption = APolylineOptions().addAll(latLngs) val aOption = APolylineOptions().addAll(latLngs)
.width(width) .width(width)
.color(fcolor) .color(fcolor)
.setDottedLine(isDotted) .setDottedLine(isDotted)
var polyline = mapReadView?.aMap?.addPolyline(aOption) var polyline = mapReadView?.aMap?.addPolyline(aOption)
MSOverlay.aPolyline = polyline MSOverlay.aPolyline = polyline
return MSOverlay return MSOverlay
} }
} }
}*/ }*/
/**绘制圆形 /**绘制圆形
...@@ -123,44 +123,44 @@ object DelDrawInMap { ...@@ -123,44 +123,44 @@ object DelDrawInMap {
* @param strokeWidth 边框宽度,默认为15f * @param strokeWidth 边框宽度,默认为15f
* @return MSOverlay 返回覆盖物对象 * @return MSOverlay 返回覆盖物对象
*/ */
/* fun drawCircle( /* fun drawCircle(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
lat: Double, lat: Double,
lng: Double, lng: Double,
radius: Float, radius: Float,
fillColor: Int = "#50FF0000".toColorInt(), fillColor: Int = "#50FF0000".toColorInt(),
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)
val options = CircleOptions() val options = CircleOptions()
.center(latLng) .center(latLng)
.radius(radius) .radius(radius)
.fillColor(fillColor) .fillColor(fillColor)
.strokeColor(strokeColor) .strokeColor(strokeColor)
.strokeWidth(strokeWidth) .strokeWidth(strokeWidth)
var circle = mapReadView?.mMineMap?.addCircle(options) var circle = mapReadView?.mMineMap?.addCircle(options)
MSOverlay.circle = circle MSOverlay.circle = circle
return MSOverlay return MSOverlay
} }
MAP_TYPE.AMAP -> { MAP_TYPE.AMAP -> {
var latLng = ALatLng(lat, lng) var latLng = ALatLng(lat, lng)
val options = ACircleOptions() val options = ACircleOptions()
.center(latLng) .center(latLng)
.radius(radius.toDouble()) .radius(radius.toDouble())
.fillColor(fillColor) .fillColor(fillColor)
.strokeColor(strokeColor) .strokeColor(strokeColor)
.strokeWidth(strokeWidth) .strokeWidth(strokeWidth)
var circle = mapReadView?.aMap?.addCircle(options) var circle = mapReadView?.aMap?.addCircle(options)
MSOverlay.aCircle = circle MSOverlay.aCircle = circle
return MSOverlay return MSOverlay
} }
} }
}*/ }*/
/*** /***
...@@ -171,48 +171,48 @@ object DelDrawInMap { ...@@ -171,48 +171,48 @@ object DelDrawInMap {
* @param strokeWidth 边框宽度 * @param strokeWidth 边框宽度
* @param strokeColor 边框颜色 * @param strokeColor 边框颜色
* ****/ * ****/
/* fun drawPolygon( /* fun drawPolygon(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>, msLatLng: List<MSLatLng>,
dLine: Boolean = false, dLine: Boolean = false,
fillColor: Int = "#10FF00FF".toColorInt(), fillColor: Int = "#10FF00FF".toColorInt(),
strokeWidth: Float = 5f, strokeWidth: Float = 5f,
strokeColor: Int = "#50FF00FF".toColorInt() strokeColor: Int = "#50FF00FF".toColorInt()
): 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)
} }
// 声明 多边形参数对象 // 声明 多边形参数对象
val polygonOptions = PolygonOptions().apply { val polygonOptions = PolygonOptions().apply {
addAll(latLngs) addAll(latLngs)
fillColor(fillColor) fillColor(fillColor)
strokeWidth(strokeWidth) strokeWidth(strokeWidth)
strokeColor(strokeColor) strokeColor(strokeColor)
dottedLine(dLine) dottedLine(dLine)
} }
var polygon = mapReadView?.mMineMap?.addPolygon(polygonOptions) var polygon = mapReadView?.mMineMap?.addPolygon(polygonOptions)
MSOverlay.polygon = polygon MSOverlay.polygon = polygon
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)
} }
val aPolygonOptions = APolygonOptions().apply { val aPolygonOptions = APolygonOptions().apply {
addAll(latLngs) addAll(latLngs)
fillColor(fillColor) fillColor(fillColor)
strokeWidth(strokeWidth) strokeWidth(strokeWidth)
strokeColor(strokeColor) strokeColor(strokeColor)
} }
var polygon = mapReadView?.aMap?.addPolygon(aPolygonOptions) var polygon = mapReadView?.aMap?.addPolygon(aPolygonOptions)
MSOverlay.aPolygon = polygon MSOverlay.aPolygon = polygon
return MSOverlay return MSOverlay
} }
} }
}*/ }*/
/** /**
...@@ -220,10 +220,10 @@ object DelDrawInMap { ...@@ -220,10 +220,10 @@ object DelDrawInMap {
* @param mapReadView 地图准备就绪的视图对象,可能为null * @param mapReadView 地图准备就绪的视图对象,可能为null
* @param mSMarker 要删除的标记点对象,可能为null * @param mSMarker 要删除的标记点对象,可能为null
*/ */
fun deleteMarker(mapReadView: MapReadyView?, mSMarker: MSMarker?) { fun deleteMarker(mSMarker: MSMarker?) {
if (mSMarker == null) if (mSMarker == null)
return return
var mapReadView = getMapReadView()
// 根据不同的地图类型执行相应的删除操作 // 根据不同的地图类型执行相应的删除操作
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
...@@ -243,12 +243,12 @@ object DelDrawInMap { ...@@ -243,12 +243,12 @@ object DelDrawInMap {
/** /**
* 删除地图上的线 * 删除地图上的线
* @param mapReadView 地图准备就绪的视图对象,可能为null
* @param mSOverlay 包含折线信息的覆盖物对象,可能为null * @param mSOverlay 包含折线信息的覆盖物对象,可能为null
*/ */
fun deletePolyline(mapReadView: MapReadyView?, mSOverlay: MSOverlay?) { fun deletePolyline(mSOverlay: MSOverlay?) {
if (mSOverlay == null) if (mSOverlay == null)
return return
var mapReadView = getMapReadView()
// 根据不同的地图类型删除对应的折线 // 根据不同的地图类型删除对应的折线
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
...@@ -264,13 +264,13 @@ object DelDrawInMap { ...@@ -264,13 +264,13 @@ object DelDrawInMap {
/** /**
* 删除圆形覆盖物 * 删除圆形覆盖物
* @param mapReadView 地图准备视图对象,可能为null
* @param mSOverlay 圆形覆盖物对象,可能为null * @param mSOverlay 圆形覆盖物对象,可能为null
*/ */
fun deleteCircle(mapReadView: MapReadyView?, mSOverlay: MSOverlay?) { fun deleteCircle(mSOverlay: MSOverlay?) {
if (mSOverlay == null) { if (mSOverlay == null) {
return return
} }
var mapReadView = getMapReadView()
// 根据不同的地图类型执行对应的圆形删除操作 // 根据不同的地图类型执行对应的圆形删除操作
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
...@@ -285,13 +285,13 @@ object DelDrawInMap { ...@@ -285,13 +285,13 @@ object DelDrawInMap {
/** /**
* 删除地图上的面 * 删除地图上的面
* @param mapReadView 地图准备就绪的视图对象,可能为null
* @param mSOverlay 面覆盖物对象,可能为null * @param mSOverlay 面覆盖物对象,可能为null
*/ */
fun deletePolygon(mapReadView: MapReadyView?, mSOverlay: MSOverlay?) { fun deletePolygon(mSOverlay: MSOverlay?) {
if (mSOverlay == null) { if (mSOverlay == null) {
return return
} }
var mapReadView = getMapReadView()
// 根据不同的地图类型执行对应的删除操作 // 根据不同的地图类型执行对应的删除操作
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
......
...@@ -3,32 +3,71 @@ package com.sd.api.maps ...@@ -3,32 +3,71 @@ package com.sd.api.maps
import androidx.core.graphics.toColorInt import androidx.core.graphics.toColorInt
import com.sd.api.MAP_TYPE import com.sd.api.MAP_TYPE
import com.sd.api.MSDKInitializer import com.sd.api.MSDKInitializer
import com.sd.api.ui.MapReadyView
import com.sd.api.maps.cdata.MSOverlay
import com.sd.api.maps.mine.MineDrawInMap
import com.sd.api.maps.amap.AmapDrawInMap import com.sd.api.maps.amap.AmapDrawInMap
import com.sd.api.maps.cdata.MSLatLng import com.sd.api.maps.cdata.MSLatLng
import com.sd.api.maps.cdata.MSMarker import com.sd.api.maps.cdata.MSMarker
import com.sd.api.maps.cdata.MSOverlay
import com.sd.api.maps.mine.MineDrawInMap
/***绘制线选项**/
class MsPolylineOptions {
/***填充颜色**/
var fcolor = "#000000".toColorInt()
/***描边颜色**/
var outlineColor = "#00000000".toColorInt()
/***线宽度,默认为10f**/
var width = 10f
/***是否为虚线,默认为false**/
var isDotted = false
}
/***绘制圆形选项**/
class MsCircleOptions {
/**半径(米)**/
var radius = 100f
/***填充颜色,默认为半透明红色*/
var fillColor = "#50FF0000".toColorInt()
/***边框颜色,默认为半透明蓝色*/
var strokeColor = "#500000FF".toColorInt()
/*** 边框宽度,默认为15f*/
var strokeWidth = 15f
}
class MsPolygonOptions {
/***填充颜色**/
var fillColor = "#10FF00FF".toColorInt()
/***边框颜色**/
var strokeColor = "#500000FF".toColorInt()
/***边框宽度**/
var strokeWidth = 5f
/***是否为虚线,默认为false**/
var dLine = false
}
/** /**
* 绘制点、线、面 * 绘制点、线、面
*
* @constructor Create empty Marker pro
*/ */
object DrawInMap { object DrawInMap : MsOperationParent() {
/** /**
* 绘制 marker 点 * 绘制 marker 点
* @param mapReadView 地图准备就绪的视图对象
* @param lat 纬度坐标 * @param lat 纬度坐标
* @param lng 经度坐标 * @param lng 经度坐标
* @return MSMarker 标记点对象 * @return MSMarker 标记点对象
*/ */
fun drawMarket( fun drawMarket(
mapReadView: MapReadyView?,
lat: Double, lat: Double,
lng: Double lng: Double
): MSMarker { ): MSMarker {
val mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
return MineDrawInMap.drawMarket(mapReadView, lat, lng) return MineDrawInMap.drawMarket(mapReadView, lat, lng)
...@@ -42,87 +81,82 @@ object DrawInMap { ...@@ -42,87 +81,82 @@ object DrawInMap {
/** /**
* 绘制线 * 绘制线
* @param mapReadView 地图加载返回
* @param msLatLng 坐标点集合 * @param msLatLng 坐标点集合
* @param fcolor 线颜色 * @param msPolylineOptions 绘制线选项
* @param outlineColor 描边颜色
* @param width 线宽度,默认为10f
* @param isDotted 是否为虚线,默认为false
* @return MSOverlay 覆盖物对象 * @return MSOverlay 覆盖物对象
*/ */
fun drawPolyline( fun drawPolyline(
mapReadView: MapReadyView?, msLatLng: List<MSLatLng>, msPolylineOptions: MsPolylineOptions
msLatLng: List<MSLatLng>,
fcolor: Int = "#000000".toColorInt(),
outlineColor: Int="#00000000".toColorInt(),
width: Float = 10f,
isDotted: Boolean = false
): MSOverlay { ): MSOverlay {
val mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
return MineDrawInMap.drawPolyline(mapReadView, msLatLng, fcolor,outlineColor, width, isDotted) return MineDrawInMap.drawPolyline(
mapReadView,
msLatLng,
msPolylineOptions
)
} }
MAP_TYPE.AMAP -> { MAP_TYPE.AMAP -> {
return AmapDrawInMap.drawPolyline(mapReadView, msLatLng, fcolor, width, isDotted) return AmapDrawInMap.drawPolyline(mapReadView, msLatLng, msPolylineOptions)
} }
} }
} }
/**
/**绘制圆形 * 绘制圆形
* @param mapReadView 地图准备就绪视图对象 * @param center 中心点坐标
* @param lat 维度 * @param msCircleOptions 绘制圆形选项
* @param lng 经度
* @param radius 半径(米)
* @param fillColor 填充颜色,默认为半透明红色
* @param strokeColor 边框颜色,默认为半透明蓝色
* @param strokeWidth 边框宽度,默认为15f
* @return MSOverlay 返回覆盖物对象 * @return MSOverlay 返回覆盖物对象
*/ */
fun drawCircle( fun drawCircle(
mapReadView: MapReadyView?, center: MSLatLng,
lat: Double, msCircleOptions: MsCircleOptions?
lng: Double, ): MSOverlay {
radius: Float, val mapReadView = getMapReadView()
fillColor: Int = "#50FF0000".toColorInt(),
strokeColor: Int = "#00000000".toColorInt(),
strokeWidth: Float = 15f
): MSOverlay{
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
return MineDrawInMap.drawCircle(mapReadView, lat, lng, radius, fillColor, strokeColor, strokeWidth) return MineDrawInMap.drawCircle(
mapReadView, center,
msCircleOptions
)
} }
MAP_TYPE.AMAP -> { MAP_TYPE.AMAP -> {
return AmapDrawInMap.drawCircle(mapReadView, lat, lng, radius, fillColor, strokeColor, strokeWidth) return AmapDrawInMap.drawCircle(
mapReadView,
center,
msCircleOptions
)
} }
} }
} }
/*** /**
* 绘制多边形 * 绘制多边形
* @param msLatLng 添加多边形顶点坐标集合 * @param msLatLng 添加多边形顶点坐标集合
* @param dLine 是否虚线 * @param msPolygonOptions 多边形绘制选型
* @param fillColor 填充颜色 */
* @param strokeWidth 边框宽度
* @param strokeColor 边框颜色
* ****/
fun drawPolygon( fun drawPolygon(
mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>, msLatLng: List<MSLatLng>,
dLine: Boolean = false, msPolygonOptions:MsPolygonOptions
fillColor: Int = "#10FF00FF".toColorInt(), ): MSOverlay {
strokeWidth: Float = 5f, val mapReadView = getMapReadView()
strokeColor: Int = "#50FF00FF".toColorInt()
): MSOverlay{
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
return MineDrawInMap.drawPolygon(mapReadView, msLatLng, dLine, fillColor, strokeWidth, strokeColor) return MineDrawInMap.drawPolygon(
mapReadView,
msLatLng,
msPolygonOptions
)
} }
MAP_TYPE.AMAP -> { MAP_TYPE.AMAP -> {
return AmapDrawInMap.drawPolygon(mapReadView, msLatLng, dLine, fillColor, strokeWidth, strokeColor) return AmapDrawInMap.drawPolygon(
mapReadView,msLatLng,
msPolygonOptions
)
} }
} }
} }
......
...@@ -2,6 +2,7 @@ package com.sd.api.maps ...@@ -2,6 +2,7 @@ package com.sd.api.maps
import com.sd.api.MAP_TYPE import com.sd.api.MAP_TYPE
import com.sd.api.MSDKInitializer import com.sd.api.MSDKInitializer
import com.sd.api.UserCtx
import com.sd.api.ui.MapReadyView import com.sd.api.ui.MapReadyView
import com.sd.api.maps.amap.AmapGestures import com.sd.api.maps.amap.AmapGestures
import com.sd.api.maps.mine.MineGestures import com.sd.api.maps.mine.MineGestures
...@@ -9,14 +10,15 @@ import com.sd.api.maps.mine.MineGestures ...@@ -9,14 +10,15 @@ import com.sd.api.maps.mine.MineGestures
/** /**
* 手势控制 * 手势控制
*/ */
object Gestures{ object Gestures : MsOperationParent() {
/** /**
* 设置地图旋转手势是否可用 * 设置地图旋转手势是否可用
* @param mapReadView 地图准备就绪视图对象 * @param mapReadView 地图准备就绪视图对象
* @param enable 是否启用旋转手势功能 * @param enable 是否启用旋转手势功能
*/ */
fun setRotateGesturesEnabled(mapReadView: MapReadyView?, enable: Boolean){ fun setRotateGesturesEnabled(enable: Boolean){
var mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
MineGestures.setRotateGesturesEnabled(mapReadView, enable) MineGestures.setRotateGesturesEnabled(mapReadView, enable)
...@@ -34,7 +36,8 @@ object Gestures{ ...@@ -34,7 +36,8 @@ object Gestures{
* @param mapReadView 地图准备就绪视图对象 * @param mapReadView 地图准备就绪视图对象
* @param enable 是否启用倾斜手势功能,true为启用,false为禁用 * @param enable 是否启用倾斜手势功能,true为启用,false为禁用
* */ * */
fun setTiltGesturesEnabled(mapReadView: MapReadyView?, enable: Boolean){ fun setTiltGesturesEnabled(enable: Boolean){
var mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
MineGestures.setTiltGesturesEnabled(mapReadView, enable) MineGestures.setTiltGesturesEnabled(mapReadView, enable)
......
...@@ -2,21 +2,21 @@ package com.sd.api.maps ...@@ -2,21 +2,21 @@ package com.sd.api.maps
import com.sd.api.MAP_TYPE import com.sd.api.MAP_TYPE
import com.sd.api.MSDKInitializer import com.sd.api.MSDKInitializer
import com.sd.api.ui.MapReadyView
import com.sd.api.maps.amap.AmapLayers import com.sd.api.maps.amap.AmapLayers
import com.sd.api.maps.mine.MineLayers import com.sd.api.maps.mine.MineLayers
/** /**
* 图层操作 * 图层操作
*/ */
object Layer { object Layer : MsOperationParent() {
/** /**
* 切换地图图层 * 切换地图图层
* @param mapReadView 地图准备就绪视图对象 * @param mapReadView 地图准备就绪视图对象
* @param type 1=普通 2=卫星 * @param type 1=普通 2=卫星
*/ */
fun toggleLayers(mapReadView: MapReadyView?, type: Int) { fun toggleLayers(type: Int) {
var mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
MineLayers.toggleLayers(mapReadView, type) MineLayers.toggleLayers(mapReadView, type)
......
...@@ -6,6 +6,9 @@ import com.amap.api.maps.model.LatLng ...@@ -6,6 +6,9 @@ import com.amap.api.maps.model.LatLng
import com.sd.api.MAP_TYPE import com.sd.api.MAP_TYPE
import com.sd.api.MSDKInitializer import com.sd.api.MSDKInitializer
import com.sd.api.maps.cdata.MSLatLng import com.sd.api.maps.cdata.MSLatLng
import kotlin.math.atan2
import kotlin.math.cos
import kotlin.math.sin
/** /**
* 地图计算工具 * 地图计算工具
...@@ -73,4 +76,46 @@ object MSCalcuMapUtil { ...@@ -73,4 +76,46 @@ object MSCalcuMapUtil {
} }
} }
/**
* 根据两个坐标点计算航向角
* @param fromPoint 起始点
* @param toPoint 终点
* @return 航向角(度),范围 0-360
*/
fun calculateBearing(
fromPoint: MSLatLng,
toPoint: MSLatLng
): Double {
return calculateBearing(
fromPoint.lng, fromPoint.lat,
toPoint.lng, toPoint.lat
)
}
/**
* 根据两个坐标点计算航向角
* @param fromLon 起始点经度
* @param fromLat 起始点纬度
* @param toLon 终点经度
* @param toLat 终点纬度
* @return 航向角(度),范围 0-360
*/
private fun calculateBearing(fromLon: Double, fromLat: Double, toLon: Double, toLat: Double): Double {
// 将度转换为弧度
val lat1 = Math.toRadians(fromLat)
val lat2 = Math.toRadians(toLat)
val deltaLon = Math.toRadians(toLon - fromLon)
// 计算航向角
val y = sin(deltaLon) * cos(lat2)
val x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(deltaLon)
val bearing = Math.toDegrees(atan2(y, x))
// 确保航向角在 0-360 度范围内
return (bearing + 360) % 360
}
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.sd.api.maps ...@@ -2,6 +2,7 @@ package com.sd.api.maps
import com.sd.api.MAP_TYPE import com.sd.api.MAP_TYPE
import com.sd.api.MSDKInitializer import com.sd.api.MSDKInitializer
import com.sd.api.bean.DriverRouteBean
import com.sd.api.bean.WayPoi import com.sd.api.bean.WayPoi
import com.sd.api.intfaces.OnNaviPresenterListener import com.sd.api.intfaces.OnNaviPresenterListener
import com.sd.api.maps.amap.AmapNai import com.sd.api.maps.amap.AmapNai
...@@ -10,12 +11,22 @@ import com.sd.api.maps.mine.MineNai ...@@ -10,12 +11,22 @@ import com.sd.api.maps.mine.MineNai
import com.sd.api.ui.MapReadyView import com.sd.api.ui.MapReadyView
/** /**
* 导航 * 导航相关
*
* @constructor Create empty M s navi
*/ */
object MSNavi { object MSNavi {
fun init() {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
MineNai.init()
}
MAP_TYPE.AMAP -> {
// AmapNai.init()
}
}
}
/** /**
* 开始导航 * 开始导航
* @param nType 1=自己实现回调 2=直接调用导航组件 * @param nType 1=自己实现回调 2=直接调用导航组件
...@@ -53,4 +64,40 @@ object MSNavi { ...@@ -53,4 +64,40 @@ object MSNavi {
} }
} }
} }
fun startSimNavi(
mapReadView: MapReadyView?,
starPoint: MSLatLng,
driverRouteBean: DriverRouteBean?,
onNaviPresenterListener: OnNaviPresenterListener?
) {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
MineNai.startSimNavi(
mapReadView,
starPoint,
driverRouteBean?.routeBase,
onNaviPresenterListener
)
}
MAP_TYPE.AMAP -> {
}
}
}
fun addNaviListener(listener: OnNaviPresenterListener) {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
MineNai.addNaviListener(listener)
}
MAP_TYPE.AMAP -> {
}
}
}
} }
\ No newline at end of file
...@@ -7,11 +7,10 @@ import com.sd.api.maps.amap.AmapRoutePlans ...@@ -7,11 +7,10 @@ import com.sd.api.maps.amap.AmapRoutePlans
import com.sd.api.maps.cdata.MSLatLng import com.sd.api.maps.cdata.MSLatLng
import com.sd.api.maps.inters.OnDriveRoute import com.sd.api.maps.inters.OnDriveRoute
import com.sd.api.maps.mine.MineRoutePlans import com.sd.api.maps.mine.MineRoutePlans
import com.sd.api.ui.MapReadyView
/**路劲规划 **/ /**路劲规划 **/
object MSRoutePlans { object MSRoutePlans : MsOperationParent() {
/**驾车路径规划 /**驾车路径规划
* @param starPoint 起点坐标 * @param starPoint 起点坐标
...@@ -28,9 +27,9 @@ object MSRoutePlans { ...@@ -28,9 +27,9 @@ object MSRoutePlans {
endPoint: MSLatLng, endPoint: MSLatLng,
endName: String = "", endName: String = "",
ways: List<WayPoi>, ways: List<WayPoi>,
mapReadView: MapReadyView?,
onDriveRoute: OnDriveRoute? onDriveRoute: OnDriveRoute?
) { ) {
var mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
MineRoutePlans.drivingPathPlanning( MineRoutePlans.drivingPathPlanning(
......
...@@ -11,7 +11,7 @@ import com.sd.api.maps.mine.MineMethodAdv ...@@ -11,7 +11,7 @@ import com.sd.api.maps.mine.MineMethodAdv
* *
* @constructor Create empty Method adv pro * @constructor Create empty Method adv pro
*/ */
object MethodAdv { object MethodAdv : MsOperationParent(){
/** /**
* 改变地图中心点 * 改变地图中心点
...@@ -20,10 +20,10 @@ object MethodAdv { ...@@ -20,10 +20,10 @@ object MethodAdv {
* @param lng 经度 * @param lng 经度
* **/ * **/
fun setMapCenter( fun setMapCenter(
mapReadView: MapReadyView?,
lat: Double, lat: Double,
lng: Double lng: Double
){ ){
var mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
MineMethodAdv.setMapCenter(mapReadView, lat, lng) MineMethodAdv.setMapCenter(mapReadView, lat, lng)
...@@ -41,7 +41,8 @@ object MethodAdv { ...@@ -41,7 +41,8 @@ object MethodAdv {
* @param mapReadView 地图准备就绪的视图对象 * @param mapReadView 地图准备就绪的视图对象
* @param zoom 缩放级别,值越小站得越高,默认值为11f * @param zoom 缩放级别,值越小站得越高,默认值为11f
* */ * */
fun setMapZoom(mapReadView: MapReadyView?, zoom: Float = 11f){ fun setMapZoom(zoom: Float = 11f){
var mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) { when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> { MAP_TYPE.MINE -> {
MineMethodAdv.setMapZoom(mapReadView, zoom) MineMethodAdv.setMapZoom(mapReadView, zoom)
......
package com.sd.api.maps
import com.sd.api.UserCtx
import com.sd.api.ui.MapReadyView
import com.sd.api.utils.ToastHelper
//地图操作父类
open class MsOperationParent {
fun getMapReadView(): MapReadyView? {
if (UserCtx.instance.mContext == null) {
return null
}
if (UserCtx.instance.mapReadyView == null) {
ToastHelper.showShort(UserCtx.instance.mContext!!, "请onMapReady回调完成")
return null
}
return UserCtx.instance.mapReadyView
}
}
\ No newline at end of file
package com.sd.api.maps
import com.amap.api.maps.model.TileOverlay
import com.amap.api.maps.model.TileOverlayOptions
import com.sd.api.MAP_TYPE
import com.sd.api.MSDKInitializer
import com.sd.api.location.MineGpsLocation
import com.sd.api.maps.amap.AmapGpsLocation
import com.sd.api.maps.amap.HeritageScopeTileProvider
import com.sd.api.ui.MapReadyView
/**
* 加载Wms地图
*/
object WmsLayer : MsOperationParent() {
private var wmsOverlay: TileOverlay? = null
/**
* Load wms layer
* @param url wms地址
*/
fun loadWmsLayer(url: String) {
var mapReadView = getMapReadView()
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
}
MAP_TYPE.AMAP -> {
val tileProvider = HeritageScopeTileProvider(url)
var aMap = mapReadView?.aMap
wmsOverlay =
aMap?.addTileOverlay(TileOverlayOptions().tileProvider(tileProvider).zIndex(1f))
}
}
}
fun removeWmsLayer() {
wmsOverlay?.remove()
}
}
\ No newline at end of file
...@@ -10,6 +10,9 @@ import com.amap.api.maps.model.PolygonOptions ...@@ -10,6 +10,9 @@ import com.amap.api.maps.model.PolygonOptions
import com.amap.api.maps.model.PolylineOptions import com.amap.api.maps.model.PolylineOptions
import com.sd.api.R import com.sd.api.R
import com.sd.api.UserCtx import com.sd.api.UserCtx
import com.sd.api.maps.MsCircleOptions
import com.sd.api.maps.MsPolygonOptions
import com.sd.api.maps.MsPolylineOptions
import com.sd.api.maps.cdata.MSLatLng import com.sd.api.maps.cdata.MSLatLng
import com.sd.api.ui.MapReadyView import com.sd.api.ui.MapReadyView
import com.sd.api.maps.cdata.MSOverlay import com.sd.api.maps.cdata.MSOverlay
...@@ -56,26 +59,22 @@ object AmapDrawInMap { ...@@ -56,26 +59,22 @@ object AmapDrawInMap {
* 绘制线 * 绘制线
* @param mapReadView 地图加载返回 * @param mapReadView 地图加载返回
* @param msLatLng 坐标点集合 * @param msLatLng 坐标点集合
* @param width 线宽度,默认为10f * @param msPolylineOptions 绘制线选项
* @param fcolor 线颜色,默认为"#FF00FF"对应的int值
* @param isDotted 是否为虚线,默认为false
* @return MSOverlay 覆盖物对象 * @return MSOverlay 覆盖物对象
*/ */
fun drawPolyline( fun drawPolyline(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>, msLatLng: List<MSLatLng>,
fcolor: Int, msPolylineOptions: MsPolylineOptions
width: Float,
isDotted: Boolean = false
): MSOverlay { ): MSOverlay {
// 绘制高德地图的线 // 绘制高德地图的线
var latLngs = msLatLng.map { var latLngs = msLatLng.map {
LatLng(it.lat, it.lng) LatLng(it.lat, it.lng)
} }
val aOption = PolylineOptions().addAll(latLngs) val aOption = PolylineOptions().addAll(latLngs)
.width(width) .width(msPolylineOptions.width)
.color(fcolor) .color(msPolylineOptions.fcolor)
.setDottedLine(isDotted) .setDottedLine(msPolylineOptions.isDotted)
var polyline = mapReadView?.aMap?.addPolyline(aOption) var polyline = mapReadView?.aMap?.addPolyline(aOption)
MSOverlay.aPolyline = polyline MSOverlay.aPolyline = polyline
return MSOverlay return MSOverlay
...@@ -84,65 +83,50 @@ object AmapDrawInMap { ...@@ -84,65 +83,50 @@ object AmapDrawInMap {
/**绘制圆形 /**绘制圆形
* @param mapReadView 地图准备就绪视图对象 * @param mapReadView 地图准备就绪视图对象
* @param lat 维度 * @param center 中心点坐标
* @param lng 经度 * @param msCircleOptions 绘制圆形选项
* @param radius 半径(米)
* @param fillColor 填充颜色,默认为半透明红色
* @param strokeColor 边框颜色,默认为半透明蓝色
* @param strokeWidth 边框宽度,默认为15f
* @return MSOverlay 返回覆盖物对象 * @return MSOverlay 返回覆盖物对象
*/ */
fun drawCircle( fun drawCircle(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
lat: Double, center: MSLatLng,
lng: Double, msCircleOptions:MsCircleOptions?
radius: Float,
fillColor: Int = "#50FF0000".toColorInt(),
strokeColor: Int = "#500000FF".toColorInt(),
strokeWidth: Float = 15f
): MSOverlay { ): MSOverlay {
var latLng = LatLng(lat, lng) var latLng = LatLng(center.lat, center.lng)
val options = CircleOptions() val options = CircleOptions()
.center(latLng) .center(latLng)
.radius(radius.toDouble()) .radius(msCircleOptions?.radius?.toDouble()?:100.0)
.fillColor(fillColor) .fillColor(msCircleOptions?.fillColor?:"#50FF0000".toColorInt())
.strokeColor(strokeColor) .strokeColor(msCircleOptions?.strokeColor?:"#500000FF".toColorInt())
.strokeWidth(strokeWidth) .strokeWidth(msCircleOptions?.strokeWidth?:15f)
var circle = mapReadView?.aMap?.addCircle(options) var circle = mapReadView?.aMap?.addCircle(options)
MSOverlay.aCircle = circle MSOverlay.aCircle = circle
return MSOverlay return MSOverlay
} }
/*** /**
* 绘制多边形 * 绘制多边形
* @param msLatLng 添加多边形顶点坐标集合 * @param msLatLng 添加多边形顶点坐标集合
* @param dLine 是否虚线 * @param msPolygonOptions 多边形绘制选型
* @param fillColor 填充颜色 */
* @param strokeWidth 边框宽度
* @param strokeColor 边框颜色
* ****/
fun drawPolygon( fun drawPolygon(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>, msLatLng: List<MSLatLng>,
dLine: Boolean = false, msPolygonOptions:MsPolygonOptions
fillColor: Int = "#10FF00FF".toColorInt(),
strokeWidth: Float = 5f,
strokeColor: Int = "#50FF00FF".toColorInt()
): MSOverlay { ): MSOverlay {
var latLngs = msLatLng.map { var latLngs = msLatLng.map {
LatLng(it.lat, it.lng) LatLng(it.lat, it.lng)
} }
val aPolygonOptions = PolygonOptions().apply { val aPolygonOptions = PolygonOptions().apply {
addAll(latLngs) addAll(latLngs)
fillColor(fillColor) fillColor(msPolygonOptions.fillColor)
strokeWidth(strokeWidth) strokeWidth(msPolygonOptions.strokeWidth)
strokeColor(strokeColor) strokeColor(msPolygonOptions.strokeColor)
} }
var polygon = mapReadView?.aMap?.addPolygon(aPolygonOptions) var polygon = mapReadView?.aMap?.addPolygon(aPolygonOptions)
MSOverlay.aPolygon = polygon MSOverlay.aPolygon = polygon
return MSOverlay return MSOverlay
} }
} }
\ No newline at end of file
...@@ -82,7 +82,7 @@ class AmapGpsLocation { ...@@ -82,7 +82,7 @@ class AmapGpsLocation {
//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明 //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
if (location.getErrorCode() == 0) { if (location.getErrorCode() == 0) {
// println("-------高德定位改变 = ${location?.latitude} curLng=${location?.longitude} speed=${location?.speed}") // println("-------高德定位改变 = ${location?.latitude} curLng=${location?.longitude} speed=${location?.speed}")
var loc = MSLocCb.Companion.instance.apply { var loc = MSLocCb.instance.apply {
lat = location?.latitude ?: 0.0 lat = location?.latitude ?: 0.0
lng = location?.longitude ?: 0.0 lng = location?.longitude ?: 0.0
speed = location?.speed ?: 0f speed = location?.speed ?: 0f
......
package com.sd.api.maps.amap package com.sd.api.maps.amap
import com.amap.api.maps.model.MyLocationStyle import com.amap.api.maps.model.MyLocationStyle
import com.sd.api.ui.MapReadyView
import com.sd.api.maps.MSLocStyle import com.sd.api.maps.MSLocStyle
import com.sd.api.ui.MapReadyView
/** /**
* 显示定位小圆点 * 显示定位小圆点
...@@ -29,7 +29,10 @@ internal object AmapLocationStyle { ...@@ -29,7 +29,10 @@ internal object AmapLocationStyle {
* @param mapReadView 地图准备就绪视图对象 * @param mapReadView 地图准备就绪视图对象
* @param type 定位类型,默认为LOCATION_TYPE_LOCATION_ROTATE,表示连续定位并旋转视角 * @param type 定位类型,默认为LOCATION_TYPE_LOCATION_ROTATE,表示连续定位并旋转视角
*/ */
fun setLocationStyle(mapReadView: MapReadyView?, type: Int = MSLocStyle.LOCATION_TYPE_LOCATION_ROTATE) { fun setLocationStyle(
mapReadView: MapReadyView?,
type: Int = MSLocStyle.LOCATION_TYPE_LOCATION_ROTATE
) {
var aMap = mapReadView?.aMap var aMap = mapReadView?.aMap
aMyLocationStyle.myLocationType(styleAMap.get(type)!!) aMyLocationStyle.myLocationType(styleAMap.get(type)!!)
aMyLocationStyle.interval(2000) //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 aMyLocationStyle.interval(2000) //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
......
package com.sd.api.maps.amap;
import com.amap.api.maps.model.UrlTileProvider;
import java.net.MalformedURLException;
import java.net.URL;
public class HeritageScopeTileProvider extends UrlTileProvider {
private String mRootUrl;
private static int titleSize = 256;
private final double initialResolution = 156543.03392804062;
private final double originShift = 20037508.342789244;
public HeritageScopeTileProvider(String url) {
super(titleSize, titleSize);
mRootUrl = url + "&service=WMS&transparent=true&&version=1.1.0&tiled=true&request=GetMap&srs=EPSG:3857&format=image/png&bbox=";
// mRootUrl = "http://192.168.59.216:8080/smartmap/wms?service=WMS&transparent=true&&version=1.1.0&tiled=true&request=GetMap&layers=yizhuang:yizhuang_avp&srs=EPSG:3857&format=image/png&bbox=";
// mRootUrl = "http://192.168.59.216:8080/tiles/{z}/{x}/{y}.png?layer=yizhuang:yizhuang_avp&service=WMS&transparent=true&&version=1.1.0&tiled=true&request=GetMap&srs=EPSG:3857&format=image/png&bbox=";
}
@Override
public URL getTileUrl(int x, int y, int level) {
try {
// System.out.println("-----------x = " + x + " y = " + y + " level = " + level);
String url = mRootUrl + TitleBounds2(x, y, level);
// System.out.println("-----------url = " + url);
return new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
private String TitleBounds(int tx, int ty, int zoom) {
double minX = Pixels2Meters(tx * titleSize, zoom);
double maxY = -Pixels2Meters(ty * titleSize, zoom);
double maxX = Pixels2Meters((tx + 1) * titleSize, zoom);
double minY = -Pixels2Meters((ty + 1) * titleSize, zoom);
minX = Meters2Lon(minX);
minY = Meters2Lat(minY);
maxX = Meters2Lon(maxX);
maxY = Meters2Lat(maxY);
return minX + "," + Double.toString(minY) + "," + Double.toString(maxX) + "," + Double.toString(maxY) + "&width=256&height=256";
}
private double Pixels2Meters(int p, int zoom) {
return p * Resolution(zoom) - originShift;
}
private double Resolution(int zoom) {
return initialResolution / (Math.pow(2, zoom));
}
private double Meters2Lon(double mx) {
double lon = mx * (180.0 / originShift);
return lon;
}
private double Meters2Lat(double my) {
double lat = Math.atan(Math.sinh(my / originShift)) * (180.0 / Math.PI);
return lat;
}
private String TitleBounds2(int tx, int ty, int zoom) {
double max_tile = Math.pow(2, zoom); // 当前z级的最大瓦片索引(从0开始)
if (tx < 0 || tx >= max_tile || ty < 0 || ty >= max_tile) {
System.out.println("-----------瓦片索引超出范围 = ");
return "";
}
// -- 3. 计算EPSG:3857的bbox
double resolution = EPSG3857.size / max_tile; //-- 单个瓦片的宽度(米)
double minx = EPSG3857.origin + tx * resolution; // 左边界
double maxy = EPSG3857.max - ty * resolution; //-- 上边界
double maxx = minx + resolution; // -- 右边界
double miny = maxy - resolution; //-- 下边界
return minx + "," + miny + "," + maxx + "," + maxy + "&width=256&height=256";
}
private static class EPSG3857 {
static double origin = -20037508.342789244;
// 最小x和最小y
static double max = 20037508.342789244;
// 最大x和最大y
static double size = 40075016.68557849;
// 直径(2×max)
}
}
...@@ -9,6 +9,9 @@ import com.minedata.minenavi.map.PolylineOptions ...@@ -9,6 +9,9 @@ import com.minedata.minenavi.map.PolylineOptions
import com.minedata.minenavi.mapdal.LatLng import com.minedata.minenavi.mapdal.LatLng
import com.sd.api.R import com.sd.api.R
import com.sd.api.UserCtx import com.sd.api.UserCtx
import com.sd.api.maps.MsCircleOptions
import com.sd.api.maps.MsPolygonOptions
import com.sd.api.maps.MsPolylineOptions
import com.sd.api.maps.cdata.MSLatLng import com.sd.api.maps.cdata.MSLatLng
import com.sd.api.maps.cdata.MSMarker import com.sd.api.maps.cdata.MSMarker
import com.sd.api.maps.cdata.MSOverlay import com.sd.api.maps.cdata.MSOverlay
...@@ -17,7 +20,7 @@ import com.sd.api.ui.MapReadyView ...@@ -17,7 +20,7 @@ import com.sd.api.ui.MapReadyView
/** /**
* 四维在地图上绘制 * 四维在地图上绘制
*/ */
object MineDrawInMap { internal object MineDrawInMap {
/** /**
...@@ -50,19 +53,12 @@ object MineDrawInMap { ...@@ -50,19 +53,12 @@ object MineDrawInMap {
* 绘制线 * 绘制线
* @param mapReadView 地图加载返回 * @param mapReadView 地图加载返回
* @param msLatLng 坐标点集合 * @param msLatLng 坐标点集合
* @param width 线宽度,默认为10f * @param msPolylineOptions 绘制线选项
* @param fcolor 线颜色,默认为"#FF00FF"对应的int值
* @param outlineColor
* @param isDotted 是否为虚线,默认为false
* @return MSOverlay 覆盖物对象
*/ */
fun drawPolyline( fun drawPolyline(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>, msLatLng: List<MSLatLng>,
fcolor: Int, msPolylineOptions:MsPolylineOptions
outlineColor: Int,
width: Float,
isDotted: Boolean = false
): MSOverlay { ): MSOverlay {
// 绘制自定义地图的线 // 绘制自定义地图的线
var latLngs = msLatLng.map { var latLngs = msLatLng.map {
...@@ -71,10 +67,10 @@ object MineDrawInMap { ...@@ -71,10 +67,10 @@ object MineDrawInMap {
var options = PolylineOptions() var options = PolylineOptions()
// 添加顶点坐标 // 添加顶点坐标
.addAll(latLngs) .addAll(latLngs)
.width(width) .width(msPolylineOptions.width)
.color(fcolor) .color(msPolylineOptions.fcolor)
.outlineColor(outlineColor) .outlineColor(msPolylineOptions.outlineColor)
.setDottedLine(isDotted) .setDottedLine(msPolylineOptions.isDotted)
var polyline = mapReadView?.mMineMap?.addPolyline(options) var polyline = mapReadView?.mMineMap?.addPolyline(options)
MSOverlay.polyline = polyline MSOverlay.polyline = polyline
return MSOverlay return MSOverlay
...@@ -83,52 +79,38 @@ object MineDrawInMap { ...@@ -83,52 +79,38 @@ object MineDrawInMap {
/**绘制圆形 /**绘制圆形
* @param mapReadView 地图准备就绪视图对象 * @param mapReadView 地图准备就绪视图对象
* @param lat 维度 * @param center 中心点坐标
* @param lng 经度 * @param msCircleOptions 绘制圆形选项
* @param radius 半径(米)
* @param fillColor 填充颜色,默认为半透明红色
* @param strokeColor 边框颜色,默认为半透明蓝色
* @param strokeWidth 边框宽度,默认为15f
* @return MSOverlay 返回覆盖物对象 * @return MSOverlay 返回覆盖物对象
*/ */
fun drawCircle( fun drawCircle(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
lat: Double, center: MSLatLng,
lng: Double, msCircleOptions:MsCircleOptions?
radius: Float,
fillColor: Int = "#50FF0000".toColorInt(),
strokeColor: Int = "#500000FF".toColorInt(),
strokeWidth: Float = 15f
): MSOverlay { ): MSOverlay {
// 根据地图类型绘制不同类型的圆形 // 根据地图类型绘制不同类型的圆形
var latLng = LatLng(lat, lng) var latLng = LatLng(center.lat, center.lng)
val options = CircleOptions() val options = CircleOptions()
.center(latLng) .center(latLng)
.radius(radius) .radius(msCircleOptions?.radius?:100f)
.fillColor(fillColor) .fillColor(msCircleOptions?.fillColor?:"#50FF0000".toColorInt())
.strokeColor(strokeColor) .strokeColor(msCircleOptions?.strokeColor?:"#500000FF".toColorInt())
.strokeWidth(strokeWidth) .strokeWidth(msCircleOptions?.strokeWidth?:15f)
var circle = mapReadView?.mMineMap?.addCircle(options) var circle = mapReadView?.mMineMap?.addCircle(options)
MSOverlay.circle = circle MSOverlay.circle = circle
return MSOverlay return MSOverlay
} }
/*** /**
* 绘制多边形 * 绘制多边形
* @param msLatLng 添加多边形顶点坐标集合 * @param msLatLng 添加多边形顶点坐标集合
* @param dLine 是否虚线 * @param msPolygonOptions 多边形绘制选型
* @param fillColor 填充颜色 */
* @param strokeWidth 边框宽度
* @param strokeColor 边框颜色
* ****/
fun drawPolygon( fun drawPolygon(
mapReadView: MapReadyView?, mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>, msLatLng: List<MSLatLng>,
dLine: Boolean = false, msPolygonOptions:MsPolygonOptions
fillColor: Int = "#10FF00FF".toColorInt(),
strokeWidth: Float = 5f,
strokeColor: Int = "#50FF00FF".toColorInt()
): MSOverlay { ): MSOverlay {
var latLngs = msLatLng.map { var latLngs = msLatLng.map {
LatLng(it.lat, it.lng) LatLng(it.lat, it.lng)
...@@ -136,10 +118,10 @@ object MineDrawInMap { ...@@ -136,10 +118,10 @@ object MineDrawInMap {
// 声明 多边形参数对象 // 声明 多边形参数对象
val polygonOptions = PolygonOptions().apply { val polygonOptions = PolygonOptions().apply {
addAll(latLngs) addAll(latLngs)
fillColor(fillColor) fillColor(msPolygonOptions.fillColor)
strokeWidth(strokeWidth) strokeWidth(msPolygonOptions.strokeWidth)
strokeColor(strokeColor) strokeColor(msPolygonOptions.strokeColor)
dottedLine(dLine) dottedLine(msPolygonOptions.dLine)
} }
var polygon = mapReadView?.mMineMap?.addPolygon(polygonOptions) var polygon = mapReadView?.mMineMap?.addPolygon(polygonOptions)
MSOverlay.polygon = polygon MSOverlay.polygon = polygon
......
...@@ -17,10 +17,10 @@ import com.minedata.minenavi.navi.RouteBase ...@@ -17,10 +17,10 @@ import com.minedata.minenavi.navi.RouteBase
import com.minedata.minenavi.navi.RouteExplorer import com.minedata.minenavi.navi.RouteExplorer
import com.minedata.minenavi.navi.SmoothNaviData import com.minedata.minenavi.navi.SmoothNaviData
import com.minedata.minenavi.navi.TmcSections import com.minedata.minenavi.navi.TmcSections
import com.minedata.minenavi.tts.NaviSpeaker
import com.minedata.minenavi.util.Tools import com.minedata.minenavi.util.Tools
import com.sd.api.UserCtx import com.sd.api.UserCtx
import com.sd.api.bean.WayPoi import com.sd.api.bean.WayPoi
import com.sd.api.maps.mine.MineNaiParams
import com.sd.api.intfaces.MyMineNaviListener import com.sd.api.intfaces.MyMineNaviListener
import com.sd.api.intfaces.OnNaviPresenterListener import com.sd.api.intfaces.OnNaviPresenterListener
import com.sd.api.maps.cdata.MSLatLng import com.sd.api.maps.cdata.MSLatLng
...@@ -39,10 +39,16 @@ object MineNai { ...@@ -39,10 +39,16 @@ object MineNai {
var mMapCar: Model? = null var mMapCar: Model? = null
private var mMineMap: MineMap? = null private var mMineMap: MineMap? = null
// var onNaviPresenterListener: OnNaviPresenterListener? = null
/**四维导航监听回调***/ /**四维导航监听回调***/
var onNaviPresenterListener: OnNaviPresenterListener? = null private var mOnNaviListeners = mutableListOf<OnNaviPresenterListener?>()
fun addNaviListener(listener: OnNaviPresenterListener?) {
mOnNaviListeners.add(listener)
}
init { fun init() {
mNaviSession = NaviSession.getInstance() mNaviSession = NaviSession.getInstance()
mNaviSession?.enableSound(true) mNaviSession?.enableSound(true)
var naviSessionParams = NaviSessionParams().apply { var naviSessionParams = NaviSessionParams().apply {
...@@ -53,22 +59,42 @@ object MineNai { ...@@ -53,22 +59,42 @@ object MineNai {
var context = UserCtx.Companion.instance.mContext var context = UserCtx.Companion.instance.mContext
mNaviSession!!.init(context, naviSessionParams) mNaviSession!!.init(context, naviSessionParams)
mNaviSession?.setDataPreference(DataPreference.preferOnline) mNaviSession?.setDataPreference(DataPreference.preferOnline)
mNaviSession?.addMineNaviListener(myMineNaviListener)
} }
/** /**
* 开启四维导航 客户端自实现数据回调 * 开启四维导航 客户端自实现数据回调
*/ */
fun startNavi(mapReadView: MapReadyView?, onNaviPresenterListener: OnNaviPresenterListener?) { fun startNavi(mapReadView: MapReadyView?, onNaviPresenterListener: OnNaviPresenterListener?) {
mNaviSession?.addMineNaviListener(myMineNaviListener)
var mRouteBas = MineRoutePlans.mRouteBase var mRouteBas = MineRoutePlans.mRouteBase
if (mRouteBas != null) { if (mRouteBas != null) {
addNaviListener(onNaviPresenterListener)
mMineMap = mapReadView?.mMineMap mMineMap = mapReadView?.mMineMap
// drawNavingCar(MineRoutePlans.mStartPoint) // drawNavingCar(MineRoutePlans.mStartPoint)
mNaviSession?.takeRoute(mRouteBas) mNaviSession?.takeRoute(mRouteBas)
} }
} }
fun startSimNavi(
mapReadView: MapReadyView?,
starPoint: MSLatLng,
routeBase: RouteBase?,
onNaviPresenterListener: OnNaviPresenterListener?
) {
if (routeBase != null) {
addNaviListener(onNaviPresenterListener)
mMineMap = mapReadView?.mMineMap
val point = Tools.latLngToPoint(LatLng(starPoint.lat, starPoint.lng))
drawNavingCar(point)
NaviSpeaker.stop()
mNaviSession?.takeRouteQuietly(routeBase)
// 设置速度
mNaviSession?.setEmulatorNaviSpeed(5.0f)
// 开始导航
mNaviSession?.startSimulation()
}
}
/** /**
* 直接跳转页面开启导航 * 直接跳转页面开启导航
*/ */
...@@ -93,12 +119,17 @@ object MineNai { ...@@ -93,12 +119,17 @@ object MineNai {
/** /**
* 直接使用RouteBase开启导航 * 直接使用RouteBase开启导航
*/ */
fun startNaviFormRouteBase(routeBase: RouteBase?, mStartPoint: MSLatLng, mapReadView: MapReadyView?) { fun startNaviFormRouteBase(
routeBase: RouteBase?,
mStartPoint: MSLatLng,
mapReadView: MapReadyView?
) {
// mMineMap = mapReadView?.mMineMap // mMineMap = mapReadView?.mMineMap
if (routeBase == null) if (routeBase == null)
return return
mMineMap = mapReadView?.mMineMap mMineMap = mapReadView?.mMineMap
mNaviSession?.addMineNaviListener(myMineNaviListener) // mNaviSession?.removeMineNaviListeners()
// mNaviSession?.addMineNaviListener(myMineNaviListener)
val starPoint = Tools.latLngToPoint(LatLng(mStartPoint.lat, mStartPoint.lng)) val starPoint = Tools.latLngToPoint(LatLng(mStartPoint.lat, mStartPoint.lng))
drawNavingCar(starPoint) drawNavingCar(starPoint)
mIsInNavigation = true mIsInNavigation = true
...@@ -162,44 +193,60 @@ object MineNai { ...@@ -162,44 +193,60 @@ object MineNai {
override fun onTracking(data: NaviSessionData) { override fun onTracking(data: NaviSessionData) {
// super.onTracking(data) // super.onTracking(data)
onNaviPresenterListener?.onTracking(data.travelledDistance.toFloat() / data.routeLength) mOnNaviListeners.forEach {
it?.onTracking(data.travelledDistance.toFloat() / data.routeLength)
}
} }
override fun onSmoothTracking(data: SmoothNaviData) { override fun onSmoothTracking(data: SmoothNaviData) {
// super.onSmoothTracking(data) // super.onSmoothTracking(data)
onNaviPresenterListener?.onSmoothTracking(data) mOnNaviListeners.forEach {
it?.onSmoothTracking(data)
}
} }
override fun onDataUpdated(naviProgressData: NaviProgressData) { override fun onDataUpdated(naviProgressData: NaviProgressData) {
// super.onDataUpdated(naviProgressData) // super.onDataUpdated(naviProgressData)
onNaviPresenterListener?.onDataUpdated(naviProgressData) mOnNaviListeners.forEach {
it?.onDataUpdated(naviProgressData)
}
} }
override fun onTiBarUpdated(tmcSections: TmcSections) { override fun onTiBarUpdated(tmcSections: TmcSections) {
// super.onTiBarUpdated(tmcSections) // super.onTiBarUpdated(tmcSections)
onNaviPresenterListener?.onTiBarUpdated(tmcSections) mOnNaviListeners.forEach {
it?.onTiBarUpdated(tmcSections)
}
} }
override fun onTextChanged(guidanceText: GuidanceText) { override fun onTextChanged(guidanceText: GuidanceText) {
// super.onTextChanged(guidanceText) // super.onTextChanged(guidanceText)
onNaviPresenterListener?.onTextChanged(guidanceText) mOnNaviListeners.forEach {
it?.onTextChanged(guidanceText)
}
} }
override fun onDistanceChanged(distance: Int) { override fun onDistanceChanged(distance: Int) {
// super.onDistanceChanged(distance) // super.onDistanceChanged(distance)
onNaviPresenterListener?.onDistanceChanged(distance) mOnNaviListeners.forEach {
it?.onDistanceChanged(distance)
}
} }
override fun onArriveDestination() { override fun onArriveDestination() {
// super.onArriveDestination() // super.onArriveDestination()
onNaviPresenterListener?.onArriveDestination() mOnNaviListeners.forEach {
it?.onArriveDestination()
}
} }
override fun onNaviEnded() { override fun onNaviEnded() {
// super.onNaviEnded() // super.onNaviEnded()
onNaviPresenterListener?.onNaviEnded() mOnNaviListeners.forEach {
it?.onNaviEnded()
}
} }
} }
} }
\ No newline at end of file
...@@ -68,18 +68,10 @@ object MineRoutePlans { ...@@ -68,18 +68,10 @@ object MineRoutePlans {
) { ) {
this.onDriveRoute = onDriveRoute this.onDriveRoute = onDriveRoute
this.mapReadView = mapReadView this.mapReadView = mapReadView
// var context = UserCtx.instance.mContext // var context = UserCtx.instance.mContext
mNaviSession = NaviSession.getInstance() mNaviSession = NaviSession.getInstance()
// 开启语音播报 // 开启语音播报
mNaviSession?.enableSound(true) mNaviSession?.enableSound(true)
/* var naviSessionParams = NaviSessionParams().apply {
autoReroute = true
autoRemoveRoute = true
// useMineNaviGPS = true
}
mNaviSession!!.init(context, naviSessionParams)*/
mNaviSession?.setDataPreference(DataPreference.preferOnline) mNaviSession?.setDataPreference(DataPreference.preferOnline)
mNaviSession?.addMineNaviListener(planiListener) mNaviSession?.addMineNaviListener(planiListener)
......
...@@ -8,20 +8,19 @@ import com.example.car_and_road_3d.models.Position ...@@ -8,20 +8,19 @@ import com.example.car_and_road_3d.models.Position
import com.sd.api.MAP_TYPE import com.sd.api.MAP_TYPE
import com.sd.api.MSDKInitializer import com.sd.api.MSDKInitializer
import com.sd.api.bean.MyCLoc import com.sd.api.bean.MyCLoc
import com.sd.api.maps.amap.AmapMethodAdv import com.sd.api.maps.MsOperationParent
import com.sd.api.maps.mine.MineMethodAdv
import com.sd.api.ui.MapReadyView import com.sd.api.ui.MapReadyView
import com.sd.api.vms.CarRoadVM import com.sd.api.vms.CarRoadVM
/** /**
* 局部图操作类 * 局部图操作类
*/ */
object MsParkRoad { object MsParkRoad : MsOperationParent() {
private var carRoadVM: CarRoadVM? = null private var carRoadVM: CarRoadVM? = null
/** /**
*设置初始化视图回调 *设置局部地图控制器
* @param mapReadyView 地图容器 * @param mapReadyView 地图容器
*/ */
fun setCarRoadVM(mapReadyView: MapReadyView?) { fun setCarRoadVM(mapReadyView: MapReadyView?) {
...@@ -35,11 +34,24 @@ object MsParkRoad { ...@@ -35,11 +34,24 @@ object MsParkRoad {
MAP_TYPE.AMAP -> { MAP_TYPE.AMAP -> {
} }
} }
} }
/** /**
*更新主车 *初始化局部视图控制器
*/
/* fun initCarRoadVM() {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
carRoadVM = getMapReadView()?.carRoadVM
}
MAP_TYPE.AMAP -> {
}
}
}*/
/**
*更新主车我只
* @param myloc 当前位置 * @param myloc 当前位置
* @param onPrAddCar 回调 * @param onPrAddCar 回调
*/ */
...@@ -247,5 +259,4 @@ object MsParkRoad { ...@@ -247,5 +259,4 @@ object MsParkRoad {
} }
} }
\ No newline at end of file
...@@ -34,7 +34,7 @@ class MapMultiView : LinearLayout { ...@@ -34,7 +34,7 @@ class MapMultiView : LinearLayout {
) { ) {
init(attrs, defStyleAttr) init(attrs, defStyleAttr)
} }
/**地图准备就绪监听回调****/
interface OnMapReadyLis { interface OnMapReadyLis {
fun onMapReady(mapReadyView: MapReadyView) fun onMapReady(mapReadyView: MapReadyView)
} }
...@@ -128,6 +128,33 @@ class MapMultiView : LinearLayout { ...@@ -128,6 +128,33 @@ class MapMultiView : LinearLayout {
// return null // return null
// } // }
/**设置指南针的显示隐藏***/
fun setCompassView(show: Boolean) {
if (mapType == 0) {//四维地图
foreMapFragment.setCompassView(show)
} else if (mapType == 1) {//高德地图
aMapFragment.setCompassView(show)
}
}
/**设置比例尺的显示隐藏***/
fun setScaleControlsEnabled(bool: Boolean) {
if (mapType == 0) {//四维地图
foreMapFragment.setScaleControlsEnabled(bool)
} else if (mapType == 1) {//高德地图
aMapFragment.setScaleControlsEnabled(bool)
}
}
/****设置定位按钮***/
fun setMyLocationButtonEnabled(bool: Boolean) {
if (mapType == 0) {//四维地图
foreMapFragment.setMyLocationButtonEnabled(bool)
} else if (mapType == 1) {//高德地图
aMapFragment.setMyLocationButtonEnabled(bool)
}
}
} }
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