Commit 7a1a8e98 authored by p x's avatar p x
Browse files

写一些DEMO

parent 4169eef4
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 打开关闭sdcard的权限 -->
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<uses-permission
android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
tools:ignore="ProtectedPermissions" /> <!-- 允许程序打开网络套接字 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 允许程序访问网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许用户改变WiFi连接状态 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 程序访问粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 允许用户访问精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android Q 允许后台运行定位 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 允许程序读取手机状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 打电话的权限 -->
<uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 从SDCard读出数据权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 允许程序写入外部存储设备 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许程序读取所有者数据 -->
<!-- Android 11+ 所有文件访问权限 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" /> <!-- 访问WiFi状态,需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 8.0 安装未知程序权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<application>
<!-- android:supportsRtl="true">-->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
<!-- <uses-library-->
<!-- android:name="org.apache.http.legacy"-->
<!-- android:required="false" />-->
<meta-data
android:name="com.minedata.minenavi.apikey"
android:value="57ac7a0d56494912a0c28e651fa4a40a" />
<!-- <meta-data-->
<!-- android:name="com.minedata.minenavi.apikey"-->
<!-- android:value="57ac7a0d56494912a0c28e651fa4a40a" />-->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="3b7d009011b97dcc3815a93e8ddfcd77" />
<!-- <meta-data-->
<!-- android:name="com.amap.api.v2.apikey"-->
<!-- android:value="3b7d009011b97dcc3815a93e8ddfcd77" />-->
<!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
<service android:name="com.amap.api.location.APSService" />
<!-- &lt;!&ndash; 定位需要的服务 使用2.0的定位需要加上这个 &ndash;&gt;-->
<!-- <service android:name="com.amap.api.location.APSService" />-->
</application>
</manifest>
\ No newline at end of file
package com.sd.maplibrary.bean
import com.amap.api.services.route.DriveRouteResult
import com.minedata.minenavi.navi.RouteCollection
class DriverRouteBean {
companion object{
val instance:DriverRouteBean by lazy { DriverRouteBean() }
}
//四维
var routeCollection: RouteCollection? = null
//高德
var driveRouteResult: DriveRouteResult? = null
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.sd.maplibrary.core
import android.content.Context
import android.graphics.BitmapFactory
import android.graphics.Color
import androidx.core.graphics.toColorInt
import com.amap.api.maps.model.BitmapDescriptorFactory
import com.minedata.minenavi.map.CircleOptions
......@@ -27,7 +28,7 @@ object MSCanvesInMap {
* @param lat 纬度
* @param lng 经度
* ***/
fun dMarket(mapReadView: MapReadyView?, lat: Double, lng: Double, context: Context) {
fun dMarket(context: Context,mapReadView: MapReadyView?, lat: Double, lng: Double) {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
val icon = BitmapFactory.decodeResource(context.resources, R.drawable.market_loc)
......@@ -58,15 +59,16 @@ object MSCanvesInMap {
/***绘制线
*@param mapReadView 地图加载返回
*@param width = 宽度
*@param fillColor = 填充颜色
*@param fcolor = 填充颜色
*@param isDotted = 是否虚线
* ***/
fun dPolyline(
mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>,
width: Float = 20f,
fillColor: Int = "#FF00FF".toColorInt(),
width: Float = 10f,
fcolor: Int = "#FF00FF".toColorInt(),
isDotted: Boolean = false
) {
when (MSDKInitializer.getMapType()) {
......@@ -78,7 +80,7 @@ object MSCanvesInMap {
// 添加顶点坐标
.addAll(latLngs)
.width(width)
.color(fillColor)
.color(fcolor)
.setDottedLine(isDotted)
var polyline = mapReadView?.mMineMap?.addPolyline(options)
}
......@@ -89,14 +91,20 @@ object MSCanvesInMap {
}
val aMarkerOption = APolylineOptions().addAll(latLngs)
.width(width)
.color(fillColor)
.color(fcolor)
.setDottedLine(isDotted)
var polyline = mapReadView?.aMap?.addPolyline(aMarkerOption)
}
}
}
/***绘制圆形****/
/***绘制圆形
* @param lat 维度
* @param lng 经度
* @param radius 半径(米)
* @param fillColor 填充颜色
* @param 边框颜色
* ****/
fun dCircle(
mapReadView: MapReadyView?,
lat: Double,
......@@ -134,6 +142,10 @@ object MSCanvesInMap {
/***
* 绘制多边形
*@param msLatLng 添加多边形顶点坐标集合
*@param fillColor 填充颜色
* @param strokeWidth 边框宽度
* @param strokeColor 边框颜色
* ****/
fun dPolygon(
mapReadView: MapReadyView?,
......
......@@ -3,6 +3,7 @@ package com.sd.maplibrary.core
import com.sd.maplibrary.MAP_TYPE
import com.sd.maplibrary.MSDKInitializer
import com.sd.maplibrary.ui.MapMultiView
/***手势交互**/
......@@ -23,7 +24,10 @@ object MSGestures {
// }
/***旋转开关**/
/***旋转开关
* @param mapReadView 从addMapRenderCallback(object : OnMapReadyLis 里拿
* @param enable 是否可用
* **/
fun setRotateGesturesEnabled(mapReadView: MapReadyView?,enable: Boolean) {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
......@@ -37,15 +41,18 @@ object MSGestures {
}
/***倾斜开关**/
fun setTiltGesturesEnabled(mapReadView: MapReadyView?,enable: Boolean) {
/***倾斜开关
* @param mapReadView 从addMapRenderCallback(object : OnMapReadyLis 里拿
* @param enable 是否可用
* **/
fun setTiltGesturesEnabled(mapReadView: MapReadyView, enable: Boolean) {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
mapReadView?.fMapView?.uiSettings?.isTiltGesturesEnabled = enable
mapReadView.fMapView?.uiSettings?.isTiltGesturesEnabled = enable
}
MAP_TYPE.AMAP -> {
mapReadView?.aMap?.uiSettings?.isTiltGesturesEnabled = enable
mapReadView.aMap?.uiSettings?.isTiltGesturesEnabled = enable
}
}
}
......
package com.sd.maplibrary.core
import com.amap.api.maps.AMap
import com.minedata.minenavi.map.MineMap
import com.minedata.minenavi.mapdal.CoordType
import com.sd.maplibrary.MAP_TYPE
import com.sd.maplibrary.MSDKInitializer
object MSLayers {
/****切换地图图层
* @param type =1 普通 2=卫星
* ***/
fun changeLayers(mapReadView: MapReadyView?, type: Int) {
if (MSDKInitializer.getMapType() == MAP_TYPE.MINE) {
when (type) {
1 -> {
switch2D(mapReadView?.mMineMap)
}
2 -> {
switchSatelliteLayer(mapReadView?.mMineMap)
}
}
} else if (MSDKInitializer.getMapType() == MAP_TYPE.AMAP) {
when (type) {
1 -> {
mapReadView?.aMap?.setMapType(AMap.MAP_TYPE_NORMAL)
}
2 -> {
mapReadView?.aMap?.setMapType(AMap.MAP_TYPE_SATELLITE)
}
}
} else {
}
}
//-----------四维---------------------------------------
private fun switch2D(mMineMap: MineMap?) {
//切换为2D平面图
mMineMap?.setElevation(90f)
mMineMap?.setStyleClass("DEFAULT")
mMineMap?.enableSatelliteLayer(false)
}
private fun switchSatelliteLayer(mMineMap: MineMap?) {
//切换为卫星图
mMineMap?.setSatelliteImageType(MineMap.SatelliteImageSource.bing, CoordType.GCJ02)
mMineMap?.setStyleClass("SATELLITE")
mMineMap?.enableSatelliteLayer(true)
}
// private fun switch3D() {
// //切换为3D俯视图
// mMineMap.setElevation(0)
// mMineMap.setStyleClass("DEFAULT")
// mMineMap.enableSatelliteLayer(false)
// }
}
\ No newline at end of file
......@@ -10,12 +10,20 @@ object MSLocationStyle {
// const val LOCATION_TYPE_EXTERNAL: Int = 0
// const val LOCATION_TYPE_SHOW: Int = 1
/***定位一次,且将视角移动到地图中心点**/
const val LOCATION_TYPE_LOCATE: Int = 2
/**连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动**/
const val LOCATION_TYPE_FOLLOW: Int = 3
/***连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动**/
const val LOCATION_TYPE_MAP_ROTATE: Int = 4
/***连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动**/
const val LOCATION_TYPE_LOCATION_ROTATE: Int = 5
/***连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动**/
const val LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER: Int = 6
/***连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动**/
const val LOCATION_TYPE_FOLLOW_NO_CENTER: Int = 7
/***连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动**/
const val LOCATION_TYPE_MAP_ROTATE_NO_CENTER: Int = 8
private var styleMap = mapOf(
......
......@@ -12,7 +12,10 @@ import com.sd.maplibrary.MSDKInitializer
/****地图方法交互**/
object MSMethodAdv {
/****改变地图中心点**/
/****改变地图中心点
* @param lat 维度
* @param lng 经度
* **/
fun setMapCenter(
mapReadView: MapReadyView?,
lat: Double = 39.977290,
......@@ -34,7 +37,9 @@ object MSMethodAdv {
}
}
/****改变地图缩放级别**/
/****改变地图缩放级别
* @param zoom 越小站得越高
* **/
fun setMapZoom(mapReadView: MapReadyView?, zoom: Float = 13f) {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
......
package com.sd.maplibrary.core
import android.content.Context
import com.amap.api.services.route.BusRouteResult
import com.amap.api.services.route.DriveRouteResult
import com.amap.api.services.route.RideRouteResult
import com.amap.api.services.route.RouteSearch
import com.amap.api.services.route.RouteSearch.DriveRouteQuery
import com.amap.api.services.route.RouteSearch.OnRouteSearchListener
import com.amap.api.services.route.WalkRouteResult
import com.minedata.minenavi.mapdal.DataPreference
import com.minedata.minenavi.mapdal.LatLng
import com.minedata.minenavi.mapdal.PoiFavorite
import com.minedata.minenavi.navi.NaviSession
import com.minedata.minenavi.navi.NaviSessionParams
import com.minedata.minenavi.navi.RouteCollection
import com.minedata.minenavi.navi.RoutePlan
import com.minedata.minenavi.navi.RouterErrorInfo
import com.minedata.minenavi.util.Tools
import com.sd.maplibrary.MAP_TYPE
import com.sd.maplibrary.MSDKInitializer
import com.sd.maplibrary.bean.DriverRouteBean
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.intfaces.MyMineNaviListener
import com.amap.api.services.core.LatLonPoint as ALatLonPoint
/****路劲规划***/
object MSRoutePlans {
//初始化高德 RouteSearch 对象
private var mRouteSearch: RouteSearch? = null
private var onDriveRoute: OnDriveRoute? = null
// private const val ROUTE_TYPE_DRIVE = 2
//初始化四维
private var mNaviSession: NaviSession? = null
//回调对象
private var driverRouteBean = DriverRouteBean.instance
/****设置监听
* @param context
* @param 接口
* **/
fun addPlanLis(context: Context, onDriveRoute: OnDriveRoute) {
this.onDriveRoute = onDriveRoute
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
mNaviSession = NaviSession.getInstance()
// 开启语音播报
mNaviSession?.enableSound(true)
var naviSessionParams = NaviSessionParams().apply {
autoReroute = true
autoRemoveRoute = true
// useMineNaviGPS = true
}
mNaviSession!!.init(context, naviSessionParams)
mNaviSession?.setDataPreference(DataPreference.preferOnline)
mNaviSession?.addMineNaviListener(myMineNaviListener)
}
MAP_TYPE.AMAP -> {
mRouteSearch = RouteSearch(context)
mRouteSearch!!.setRouteSearchListener(onRouteSearchListener)
}
}
}
/***驾车路径规划
*@param starPoint 起点坐标
* @param endPoint 终点坐标
* @param endName 终点名称(高德可不传)
* ***/
fun drivingPathPlanning(starPoint: MSLatLng, endPoint: MSLatLng, endName: String = "") {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
val starPoint = Tools.latLngToPoint(LatLng(starPoint.lat, starPoint.lng))
val endPoint = Tools.latLngToPoint(LatLng(endPoint.lat, endPoint.lng))
var startName = "当前位置"
var endName = endName
var wayPoints = listOf<PoiFavorite>()
val routePlan = RoutePlan()
routePlan.setRoutePreference(RoutePlan.RoutePreference.none)
routePlan.setTransportationType(RoutePlan.TransportationType.car)
mNaviSession?.calculateDriveRoute(
PoiFavorite(starPoint, startName),
wayPoints,
PoiFavorite(endPoint, endName),
routePlan,
NaviSession.RouteMethod.multipleResult
)
}
MAP_TYPE.AMAP -> {
val mStartPoint =
ALatLonPoint(starPoint.lat, starPoint.lng) //起点,39.942295,116.335891
val mEndPoint = ALatLonPoint(endPoint.lat, endPoint.lng) //终点,39.995576,116.481288
val fromAndTo = RouteSearch.FromAndTo(mStartPoint, mEndPoint)
// 驾车路径规划
val query = DriveRouteQuery(fromAndTo, RouteSearch.DrivingDefault, null, null, "")
// 第一个参数表示路径规划的起点和终点,第二个参数表示驾车模式,第三个参数表示途经点,第四个参数表示避让区域,第五个参数表示避让道路
mRouteSearch?.calculateDriveRouteAsyn(query) // 异步路径规划驾车模式查询
}
}
}
//自定义驾车路线返回
interface OnDriveRoute {
fun onDriverRoute(driverRouteBean: DriverRouteBean)
}
//-------------- 四维 导航监听 --------------------------
private var myMineNaviListener = object : MyMineNaviListener() {
private fun getRouteMsg(data: RouterErrorInfo): String {
var msg = ""
when (data.errCode) {
RouterErrorInfo.Type.ComputeFailed -> msg = "路线计算失败"
RouterErrorInfo.Type.destAuthError -> msg = "终点所在位置数据授权错误"
RouterErrorInfo.Type.destNoData -> msg = "重点所在位置没有数据"
RouterErrorInfo.Type.MissingSubfiles -> msg = "缺少途径省份数据"
RouterErrorInfo.Type.NetworkError -> msg = "网络连接错误"
RouterErrorInfo.Type.None -> {}
RouterErrorInfo.Type.NotEnoughMemory -> msg = "没有足够的内存可以使用"
RouterErrorInfo.Type.oriAuthError -> msg = "起点所在位置数据授权错误"
RouterErrorInfo.Type.OriDestTooNear -> msg = "起点和终点距离太近"
RouterErrorInfo.Type.oriNoData -> msg = "起点所在位置没有数据"
RouterErrorInfo.Type.SetDestFailed -> msg = "设置终点失败"
RouterErrorInfo.Type.SetOriFailed -> msg = "设置起点失败"
RouterErrorInfo.Type.waypointAuthError -> msg = "途经点所在位置数据授权错误"
RouterErrorInfo.Type.waypointNoData -> msg = "途经点所在位置没有数据"
}
return msg
}
override fun onCalculateRouteSuccess(data: RouteCollection) {
// 路线规划成功
driverRouteBean.routeCollection = data
}
override fun onCalculateRouteFailed(data: RouterErrorInfo) {
// 路线规划失败
val msg = getRouteMsg(data)
var a = 0
}
}
//---------- 高德导航 监听-----
private var onRouteSearchListener = object : OnRouteSearchListener {
override fun onBusRouteSearched(
p0: BusRouteResult?,
p1: Int
) {
}
//驾车路线返回
override fun onDriveRouteSearched(
result: DriveRouteResult,
errorCode: Int
) {
driverRouteBean.driveRouteResult = result
}
override fun onWalkRouteSearched(
p0: WalkRouteResult?,
errorCode: Int
) {
}
override fun onRideRouteSearched(
p0: RideRouteResult?,
p1: Int
) {
}
}
}
\ No newline at end of file
......@@ -55,7 +55,7 @@ class MapMultiView : LinearLayout {
enmuValue = getInt(R.styleable.MapMultiView_map_type, 0)
}
}
println("------------MSDKInitializer. = ${MSDKInitializer.getMapType()}")
println("------------MapMultiView = ${MSDKInitializer.getMapType()}")
binding = MultiViewBinding.inflate(LayoutInflater.from(context))
addView(binding.root)
loadMapFrament()
......
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