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

封装驾车导航

parent 3bac7e4c
......@@ -5,9 +5,6 @@
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="testAnnotation()">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>
\ No newline at end of file
......@@ -42,7 +42,7 @@ android {
dependencies {
// implementation(fileTree(mapOf("dir" to "libs","include" to listOf("*.jar", "*.aar"))))
implementation(fileTree(mapOf("dir" to "libs","include" to listOf("*.jar", "*.aar"))))
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
......
......@@ -12,6 +12,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.MapMultiEngine"
tools:targetApi="31">
<activity
android:name=".ui.CalculateDistanceActivity"
android:exported="false" />
<activity
android:name=".ui.DisplayMapActivity"
android:exported="false" />
......@@ -50,17 +53,6 @@
android:exported="false"
android:theme="@style/Theme.MapMultiEngine" />
<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.amap.api.v2.apikey"
android:value="3b7d009011b97dcc3815a93e8ddfcd77" /> <!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
<service android:name="com.amap.api.location.APSService" />
<activity
android:name=".ui.TBaseActivity"
......
......@@ -14,6 +14,7 @@ import com.sd.maplibrary.MSDKInitializer
import com.sd.maplibrary.OnSdkInitCb
import com.sd.mapmultiengine.adapter.DemoListAdapter
import com.sd.mapmultiengine.databinding.ActivityMainBinding
import com.sd.mapmultiengine.ui.CalculateDistanceActivity
import com.sd.mapmultiengine.ui.ChangeMapCenterAct
import com.sd.mapmultiengine.ui.DisplayMapActivity
import com.sd.mapmultiengine.ui.GestureDemo
......@@ -53,9 +54,9 @@ class MainActivity : AppCompatActivity() {
DemoDetails("绘制一个面", TPolygonActivity::class.java),
DemoDetails("Poi检索(关键字,范围)", TPoiSearchActivity::class.java),
DemoDetails("逆地理编码", TReGeocodeActivity::class.java),
DemoDetails("两点间距离计算", CalculateDistanceActivity::class.java),
DemoDetails("定位", TGpsActivity::class.java),
DemoDetails("定位,获取我的位置", TGpsActivity::class.java),
DemoDetails("驾车路线规划", TDriveRouteActivity::class.java),
)
......@@ -107,7 +108,7 @@ class MainActivity : AppCompatActivity() {
}
fun initMap(type: MAP_TYPE = MAP_TYPE.MINE) {
fun initMap(type: MAP_TYPE = MAP_TYPE.AMAP) {
MSDKInitializer.initializeMap(this, type, object : OnSdkInitCb {
override fun onInitSuccess() {
println("--------onMapInitSuccess")
......
......@@ -67,6 +67,7 @@ class TextMainActivity : AppCompatActivity() {
//改变地图中心点
// MSMethodAdv.setMapCenter(mapReadView)
// MSMethodAdv.setMapCenter(mapReadView, 39.977290, 116.337000)
//改变缩放级别
MSMethodAdv.setMapZoom(mapReadView, 10f)
//绘制Marker点
......
......@@ -58,9 +58,9 @@ class PoiAdapter : BaseQuickAdapter<PoiSearchRes, PoiAdapter.PoiSH>() {
}
binding.poiDes.text = bean.snippet
binding.tvDistan.text=bean.distance.toString()
// val distanceBean: DistanceBean = MyGeoTools.cauMyLocDistance(bean.lat, bean.lng)
// binding.tvDistan.text = "${distanceBean.distanceValue}${distanceBean.distanceUnit}"
// binding.tvDistan.text=bean.distance.toString()
val distanceBean: DistanceBean = MyGeoTools.cauMyLocDistance(bean.lat, bean.lng)
binding.tvDistan.text = "${distanceBean.distanceValue}${distanceBean.distanceUnit}"
}
fun setListener() {
......
package com.sd.mapmultiengine.ui
import android.os.Bundle
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.core.MSMapUtil
import com.sd.maplibrary.core.MapReadyView
import com.sd.maplibrary.ui.MapMultiView.OnMapReadyLis
import com.sd.mapmultiengine.R
import com.sd.mapmultiengine.databinding.ActivityCalculateDistanceBinding
import com.sd.mapmultiengine.databinding.ActivityDisplayMapBinding
import com.sd.mapmultiengine.ui.DisplayMapActivity
import com.sd.mapmultiengine.utils.ToastHelper
/****两点间距离计算***/
class CalculateDistanceActivity : AppCompatActivity() {
private lateinit var binding: ActivityCalculateDistanceBinding
var mapReadView: MapReadyView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityCalculateDistanceBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.mapMultiView.addMapRenderCallback(object : OnMapReadyLis {
override fun onMapReady(mapReadyView: MapReadyView) {
this@CalculateDistanceActivity.mapReadView = mapReadyView
}
})
//计算2点距离
binding.bt1.setOnClickListener {
var latLng1=MSLatLng(binding.et1.text.toString().toDouble(),binding.et2.text.toString().toDouble())
var latLng2=MSLatLng(binding.et3.text.toString().toDouble(),binding.et4.text.toString().toDouble())
var dis=MSMapUtil.calculateLineDistance(mapReadView,latLng1,latLng2)
println("----计算2点距离 = ${dis}")
ToastHelper.showShort(this@CalculateDistanceActivity,"距离= $dis")
}
}
}
\ No newline at end of file
......@@ -30,13 +30,17 @@ class ChangeMapCenterAct : AppCompatActivity() {
binding.bt1.setOnClickListener {
//改变地图中心点
MSMethodAdv.setMapCenter(mapReadView, 40.033121, 116.307621)
MSMethodAdv.setMapCenter(mapReadView, binding.et1.text.toString().toDouble(), binding.et2.text.toString().toDouble())
}
//改变缩放级别
binding.bt2.setOnClickListener {
var zoom = binding.et1.text.toString().toFloat()
var zoom = binding.et3.text.toString().toFloat()
MSMethodAdv.setMapZoom(mapReadView, zoom)
}
// //设置地图边界范围
// binding.bt3.setOnClickListener {
// MSMethodAdv.setMapBoundArea(mapReadView)
// }
}
......
package com.sd.mapmultiengine.ui
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.sd.maplibrary.bean.MSLatLng
import com.sd.maplibrary.core.MSCanvesInMap
import com.sd.maplibrary.core.MSMethodAdv
import com.sd.maplibrary.core.MapReadyView
import com.sd.maplibrary.ui.MapMultiView.OnMapReadyLis
import com.sd.mapmultiengine.R
import com.sd.mapmultiengine.databinding.ActivityDisplayMapBinding
import com.sd.mapmultiengine.databinding.ActivityTpolygonBinding
import com.sd.mapmultiengine.ui.TPolygonActivity
/***展示地图***/
class DisplayMapActivity : AppCompatActivity() {
......
......@@ -10,7 +10,6 @@ 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.map.Route
import com.minedata.minenavi.map.RouteOptions
import com.minedata.minenavi.mapdal.LatLng
import com.minedata.minenavi.mapdal.PoiFavorite
import com.minedata.minenavi.navi.ArrowInfo
......@@ -32,21 +31,24 @@ 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.bean.RouteOver
import com.sd.maplibrary.core.MSRoutePlans
import com.sd.maplibrary.core.MSRoutePlans.OnDriveRoute
import com.sd.maplibrary.core.MapReadyView
import com.sd.maplibrary.ui.MapMultiView.OnMapReadyLis
import com.sd.mapmultiengine.databinding.ActivityTdriveRouteBinding
import overlay.DrivingRouteOverlay
import com.amap.api.services.core.LatLonPoint as ALatLonPoint
/******/
class TDriveRouteActivity : AppCompatActivity() {
private lateinit var binding: ActivityTdriveRouteBinding
var mapReadView: MapReadyView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityTdriveRouteBinding.inflate(layoutInflater)
......@@ -55,24 +57,23 @@ class TDriveRouteActivity : AppCompatActivity() {
binding.mapMultiView.addMapRenderCallback(object : OnMapReadyLis {
override fun onMapReady(mapReadyView: MapReadyView) {
this@TDriveRouteActivity.mapReadView = mapReadyView
}
})
//初始化并设置监听
MSRoutePlans.addPlanLis(this, onDriveRoute)
//开始规划
binding.starplan.setOnClickListener {
// if (mapReadView == null)
// return@setOnClickListener
if (mapReadView == null)
return@setOnClickListener
// 起点坐标 116.3215,39.8919
val startPoint = MSLatLng(39.806898, 116.490682)
//// 终点坐标116.3793,39.8643
val endPoint = MSLatLng(39.864311, 116.379311)
//// 终点名称
val endName = "沈阳火车站"
MSRoutePlans.drivingPathPlanning(startPoint, endPoint, endName)
//开始路径规划
MSRoutePlans.drivingPathPlanning(this,startPoint, endPoint, endName)
// testDriverPlan()
// testDriverPlanaMAP()
......@@ -80,41 +81,31 @@ class TDriveRouteActivity : AppCompatActivity() {
}
//算路结果回调
private var onDriveRoute = object : OnDriveRoute {
override fun onDriverRoute(driverRouteBean: DriverRouteBean) {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
// mapReadView?.mMineMap?.removeOverlay(mRoute)
var routeBase = driverRouteBean.routeCollection?.routes?.get(0)
val options = RouteOptions()
.routeBase(routeBase)
.colorType(Route.RouteColorType.enrouteTi)
// .colorType(Route.RouteColorType.none)
.styleClass("DEFAULT")
var mRoute = mapReadView?.mMineMap?.addRoute(options)
setRouteOverlayStyle(mRoute, false)
MAP_TYPE.MINE -> {//开始绘制
//删除已存在的路径图层
// if (RouteOver.instance.route != null) {
// mapReadView?.mMineMap?.removeOverlay(RouteOver.instance.route)
// }
MSRoutePlans.drawPlanPath(
mapReadView,
driverRouteBean,
this@TDriveRouteActivity
)
}
MAP_TYPE.AMAP -> {
mapReadView?.aMap?.clear()
var drivePath = driverRouteBean.driveRouteResult?.paths?.get(0);
if (drivePath == null) {
return
}
var mDriveRouteResult = driverRouteBean.driveRouteResult
var drivingRouteOverlay = DrivingRouteOverlay(
this@TDriveRouteActivity, mapReadView?.aMap!!, drivePath,
mDriveRouteResult?.getStartPos(),
mDriveRouteResult?.getTargetPos(), null
// 清理地图上的所有覆盖物
// mapReadView?.aMap?.clear()
MSRoutePlans.drawPlanPath(
mapReadView,
driverRouteBean,
this@TDriveRouteActivity
)
drivingRouteOverlay.setNodeIconVisibility(false) //设置节点marker是否显示
drivingRouteOverlay.setIsColorfulline(true) //是否用颜色展示交通拥堵情况,默认true
drivingRouteOverlay.removeFromMap()
drivingRouteOverlay.addToMap()
drivingRouteOverlay.zoomToSpan()
}
}
}
......@@ -198,10 +189,10 @@ class TDriveRouteActivity : AppCompatActivity() {
}
override fun onNewRouteTaken() {
override fun onNewRouteTaken(data: RouteBase?) {
}
override fun onRouteRemoved() {
}
......@@ -238,22 +229,27 @@ class TDriveRouteActivity : AppCompatActivity() {
}
override fun onNaviBegin() {
override fun onNaviBegin(data: RouteBase?) {
}
override fun onNaviEnded() {
}
override fun onSimNaviBegin() {
override fun onSimNaviBegin(data: RouteBase?) {
}
override fun onSimNaviPaused(data: RouteBase?) {
}
override fun onSimNaviEnd() {
override fun onSimNaviResumed(data: RouteBase?) {
}
override fun onSimNaviEnd(data: RouteBase?) {
}
override fun onTracking(p0: NaviSessionData?) {
}
......
package com.sd.mapmultiengine.ui
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.sd.maplibrary.bean.MSLocBean
import com.sd.maplibrary.core.MSCanvesInMap
import com.sd.maplibrary.core.MSGpsLocation
import com.sd.mapmultiengine.R
import com.sd.maplibrary.core.MSMarker
import com.sd.maplibrary.core.MSMethodAdv
import com.sd.maplibrary.core.MapReadyView
import com.sd.maplibrary.ui.MapMultiView.OnMapReadyLis
import com.sd.mapmultiengine.databinding.ActivityTgpsBinding
import com.sd.mapmultiengine.databinding.ActivityTreGeocodeBinding
import com.sd.mapmultiengine.ui.TLayersActivity
import com.sd.mapmultiengine.ui.TMarkerActivity
/***定位***/
/***定位 ,展示我的位置***/
class TGpsActivity : AppCompatActivity() {
private lateinit var binding: ActivityTgpsBinding
var mapReadView: MapReadyView? = null
var msMark: MSMarker? = null
var lat = 0.0
var lng = 0.0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityTgpsBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.mapMultiView.addMapRenderCallback(object : OnMapReadyLis {
override fun onMapReady(mapReadyView: MapReadyView) {
this@TGpsActivity.mapReadView = mapReadyView
//绘制Marker点 116.3985,39.9079
// MSCanvesInMap.dMarket(this@TLineActivity, mapReadView, 39.907900, 116.398500)
// MSMethodAdv.setMapCenter(mapReadView, 39.999391, 116.135972)
}
})
//初始化
MSGpsLocation.initLoc(this)
//设置回调
MSGpsLocation.setOnMsGpsLoc(object : MSGpsLocation.OnMsGpsLoc {
override fun onMsGpsLoc(mSLocBean: MSLocBean) {
println("---------mSLocBean = ${mSLocBean}")
lat = mSLocBean.lat
lng = mSLocBean.lng
var sb = StringBuilder()
sb.run {
append("纬度:${mSLocBean.lat} \n")
......@@ -43,6 +63,12 @@ class TGpsActivity : AppCompatActivity() {
binding.bt.setOnClickListener {
MSGpsLocation.starLoc()
}
//我的位置
binding.bt1.setOnClickListener {
msMark =
MSCanvesInMap.drawMarket(this, mapReadView, lat, lng)
MSMethodAdv.setMapCenter(mapReadView, lat, lng)
}
}
override fun onStop() {
......
......@@ -75,7 +75,7 @@ class TPoiSearchActivity : AppCompatActivity() {
keyword,
39.977290,
116.337000,
25000,
binding.et1.text.toString().toInt(),
object : MSPoiSearch.OnMSPoiSearchLis {
override fun onPoiLis(
poiList: List<PoiSearchRes>,
......
......@@ -35,7 +35,7 @@ class TPolygonActivity : AppCompatActivity() {
MSLatLng(39.993391, 116.135272), MSLatLng(39.808323, 116.057604),
MSLatLng(39.904430, 116.265061), MSLatLng(39.950192, 116.140002)
)
mSOverlay = MSCanvesInMap.drawPolygon(mapReadView, mspLatLng)
mSOverlay = MSCanvesInMap.drawPolygon(mapReadView, mspLatLng,true)
}
})
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="一个点" />
<EditText
android:id="@+id/et1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="number"
android:text="39.897424" />
<EditText
android:id="@+id/et2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="number"
android:text="116.356508" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="又一个点" />
<EditText
android:id="@+id/et3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="number"
android:text="39.898424" />
<EditText
android:id="@+id/et4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="number"
android:text="116.356508" />
</LinearLayout>
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="计算" />
<com.sd.maplibrary.ui.MapMultiView
android:id="@+id/mapMultiView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
......@@ -10,33 +8,58 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et1"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:inputType="number"
android:text="40.033121" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/et2"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:inputType="number"
android:text="116.307621" />
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="改变中心点" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/et1"
android:id="@+id/et3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:gravity="center"
android:hint="输入数字"
android:hint="输入数字级别"
android:inputType="number" />
<Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="改缩放级别" />
android:text="改缩放级别" />
<!-- <Button-->
<!-- android:id="@+id/bt3"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="设置地图边界范围" />-->
</LinearLayout>
<com.sd.maplibrary.ui.MapMultiView
android:id="@+id/mapMultiView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:map_type="MINE" />
android:layout_height="match_parent" />
</LinearLayout>
\ No newline at end of file
......@@ -6,10 +6,15 @@
android:orientation="vertical"
tools:context=".ui.TDriveRouteActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="北京南站 - 沈阳火车站"/>
<Button
android:id="@+id/starplan"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始规划" />
......
......@@ -11,9 +11,22 @@
android:text="开始定位" />
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="定位到我的位置" />
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="wrap_content" />
<com.sd.maplibrary.ui.MapMultiView
android:id="@+id/mapMultiView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
\ No newline at end of file
......@@ -15,18 +15,41 @@
android:layout_height="wrap_content"
android:text="北京大学" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="当前位置41.80196, 123.43326" />
<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关键字搜索" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="当前位置 39.977290 116.337000" />
<EditText
android:id="@+id/et1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5000"/>
<Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="范围搜索" />
android:text="范围搜索(米)" />
</LinearLayout>
......@@ -49,7 +72,6 @@
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
......@@ -4,6 +4,7 @@ plugins {
id("kotlin-kapt")
}
android {
namespace = "com.sd.maplibrary"
compileSdk = 35
......@@ -53,6 +54,9 @@ dependencies {
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
//高德
// implementation("com.amap.api:navi-3dmap:latest.integration")
// implementation("com.amap.api:search:latest.integration")
//网络
implementation("com.squareup.okhttp3:okhttp:3.12.0")
implementation("com.google.code.gson:gson:2.8.6")
......
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