Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
MapMultiEngine
Commits
7a1a8e98
Commit
7a1a8e98
authored
Jul 28, 2025
by
p x
Browse files
写一些DEMO
parent
4169eef4
Changes
49
Hide whitespace changes
Inline
Side-by-side
maplibrary/src/main/AndroidManifest.xml
View file @
7a1a8e98
<?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"
/>
<!--
<!–
定位需要的服务 使用2.0的定位需要加上这个
–>
-->
<!--
<service android:name="com.amap.api.location.APSService" />
-->
</application>
</manifest>
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/bean/DriverRouteBean.kt
0 → 100644
View file @
7a1a8e98
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
maplibrary/src/main/java/com/sd/maplibrary/core/MSCanvesInMap.kt
View file @
7a1a8e98
...
...
@@ -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 f
illC
olor = 填充颜色
*@param f
c
olor = 填充颜色
*@param isDotted = 是否虚线
* ***/
fun
dPolyline
(
mapReadView
:
MapReadyView
?,
msLatLng
:
List
<
MSLatLng
>,
width
:
Float
=
2
0f
,
f
illC
olor
:
Int
=
"#FF00FF"
.
toColorInt
(),
width
:
Float
=
1
0f
,
f
c
olor
:
Int
=
"#FF00FF"
.
toColorInt
(),
isDotted
:
Boolean
=
false
)
{
when
(
MSDKInitializer
.
getMapType
())
{
...
...
@@ -78,7 +80,7 @@ object MSCanvesInMap {
// 添加顶点坐标
.
addAll
(
latLngs
)
.
width
(
width
)
.
color
(
f
illC
olor
)
.
color
(
f
c
olor
)
.
setDottedLine
(
isDotted
)
var
polyline
=
mapReadView
?.
mMineMap
?.
addPolyline
(
options
)
}
...
...
@@ -89,14 +91,20 @@ object MSCanvesInMap {
}
val
aMarkerOption
=
APolylineOptions
().
addAll
(
latLngs
)
.
width
(
width
)
.
color
(
f
illC
olor
)
.
color
(
f
c
olor
)
.
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
?,
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSGestures.kt
View file @
7a1a8e98
...
...
@@ -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
}
}
}
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSLayers.kt
0 → 100644
View file @
7a1a8e98
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
maplibrary/src/main/java/com/sd/maplibrary/core/MSLocationStyle.kt
View file @
7a1a8e98
...
...
@@ -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
(
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSMethodAdv.kt
View file @
7a1a8e98
...
...
@@ -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
->
{
...
...
maplibrary/src/main/java/com/sd/maplibrary/core/MSRoutePlans.kt
0 → 100644
View file @
7a1a8e98
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
maplibrary/src/main/java/com/sd/maplibrary/ui/MapMultiView.kt
View file @
7a1a8e98
...
...
@@ -55,7 +55,7 @@ class MapMultiView : LinearLayout {
enmuValue
=
getInt
(
R
.
styleable
.
MapMultiView_map_type
,
0
)
}
}
println
(
"------------M
SDKInitializer.
= ${MSDKInitializer.getMapType()}"
)
println
(
"------------M
apMultiView
= ${MSDKInitializer.getMapType()}"
)
binding
=
MultiViewBinding
.
inflate
(
LayoutInflater
.
from
(
context
))
addView
(
binding
.
root
)
loadMapFrament
()
...
...
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment