(七)高德地图之路线导航

news/2024/4/15 0:50:29

本节将要实现的功能是路线导航,确定出发点和到达的终点坐标,两点之间的路线导航。跟前几篇一样,上代码

首先是类文件NaviActivity.java

package com.junto.gdmaptest.navi;import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.Window;
import android.widget.Toast;import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewListener;
import com.amap.api.navi.enums.NaviType;
import com.amap.api.navi.model.AMapCalcRouteResult;
import com.amap.api.navi.model.AMapLaneInfo;
import com.amap.api.navi.model.AMapModelCross;
import com.amap.api.navi.model.AMapNaviCameraInfo;
import com.amap.api.navi.model.AMapNaviCross;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.AMapNaviRouteNotifyData;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AMapServiceAreaInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.amap.api.navi.model.NaviInfo;
import com.amap.api.navi.model.NaviLatLng;
import com.autonavi.tbt.TrafficFacilityInfo;
import com.junto.gdmaptest.R;
import com.junto.gdmaptest.util.ErrorInfo;import java.util.ArrayList;
import java.util.List;/*** Created by WangJinyong on 2018/11/7.* 路线导航*/public class NaviActivity extends Activity implements AMapNaviListener,AMapNaviViewListener {protected AMapNaviView mAMapNaviView;protected AMapNavi mAMapNavi;protected NaviLatLng mEndLatlng = new NaviLatLng(40.084894,116.603039);//终点经纬度protected NaviLatLng mStartLatlng = new NaviLatLng(39.825934,116.342972);//起点经纬度protected final List<NaviLatLng> sList = new ArrayList<NaviLatLng>();//起点经纬度集合protected final List<NaviLatLng> eList = new ArrayList<NaviLatLng>();//终点经纬度集合protected List<NaviLatLng> mWayPointList;//途经点经纬度集合@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_navi);mAMapNaviView = findViewById(R.id.navi_view);mAMapNaviView.onCreate(savedInstanceState);mAMapNaviView.setAMapNaviViewListener(this);mAMapNavi = AMapNavi.getInstance(getApplicationContext());mAMapNavi.addAMapNaviListener(this);mAMapNavi.setUseInnerVoice(true);//使用内置语音播报//设置模拟导航的行车速度mAMapNavi.setEmulatorNaviSpeed(75);sList.add(mStartLatlng);eList.add(mEndLatlng);mWayPointList = new ArrayList();mWayPointList.add(new NaviLatLng(39.925846, 116.442765));}@Overrideprotected void onResume() {super.onResume();mAMapNaviView.onResume();}@Overrideprotected void onPause() {super.onPause();mAMapNaviView.onPause();
//        停止导航之后,会触及底层stop,然后就不会再有回调了,但是讯飞当前还是没有说完的半句话还是会说完
//        mAMapNavi.stopNavi();}@Overrideprotected void onDestroy() {super.onDestroy();mAMapNaviView.onDestroy();//since 1.6.0 不再在naviview destroy的时候自动执行AMapNavi.stopNavi();请自行执行mAMapNavi.stopNavi();mAMapNavi.destroy();}//==============================下面是AMapNaviListener实现的方法=========================//@Overridepublic void onInitNaviFailure() {}@Overridepublic void onInitNaviSuccess() {//初始化成功/*** 方法: int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute); 参数:** @congestion 躲避拥堵* @avoidhightspeed 不走高速* @cost 避免收费* @hightspeed 高速优先* @multipleroute 多路径**  说明: 以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。*  注意: 不走高速与高速优先不能同时为true 高速优先与避免收费不能同时为true*/int strategy = 0;try {//再次强调,最后一个参数为true时代表多路径,否则代表单路径strategy = mAMapNavi.strategyConvert(true, true, true, false, true);} catch (Exception e) {e.printStackTrace();}mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);//起始点坐标、终点坐标、途经点坐标、strategy
//        mAMapNavi.calculateWalkRoute(new NaviLatLng(39.925846, 116.435765), new NaviLatLng(39.925846, 116.532765));//步行导航
//        mAMapNavi.calculateRideRoute(new NaviLatLng(39.925846, 116.435765), new NaviLatLng(39.925846, 116.532765));//骑行导航}@Overridepublic void onCalculateRouteSuccess(int[] ints) {//多路径算路成功回调
//        mAMapNavi.startNavi(NaviType.EMULATOR);//模拟导航mAMapNavi.startNavi(NaviType.GPS);//实时导航}@Overridepublic void onStartNavi(int i) {//开始导航回调}@Overridepublic void onTrafficStatusUpdate() {}@Overridepublic void onLocationChange(AMapNaviLocation aMapNaviLocation) {//当前位置回调}@Overridepublic void onGetNavigationText(int i, String s) {//播报类型和播报文字回调}@Overridepublic void onGetNavigationText(String s) {}@Overridepublic void onEndEmulatorNavi() {//结束模拟导航}@Overridepublic void onArriveDestination() {//到达目的地}@Overridepublic void onCalculateRouteFailure(int errorInfo) {//路线计算失败Log.e("dm", "--------------------------------------------");Log.i("dm", "路线计算失败:错误码=" + errorInfo + ",Error Message= " + ErrorInfo.getError(errorInfo));Log.i("dm", "错误码详细链接见:http://lbs.amap.com/api/android-navi-sdk/guide/tools/errorcode/");Log.e("dm", "--------------------------------------------");Toast.makeText(this, "errorInfo:" + errorInfo + ",Message:" + ErrorInfo.getError(errorInfo), Toast.LENGTH_LONG).show();}@Overridepublic void onReCalculateRouteForYaw() {//偏航后重新计算路线回调}@Overridepublic void onReCalculateRouteForTrafficJam() {//拥堵后重新计算路线回调}@Overridepublic void onArrivedWayPoint(int i) {//到达途径点}@Overridepublic void onGpsOpenStatus(boolean b) {//GPS开关状态回调}@Overridepublic void onNaviInfoUpdate(NaviInfo naviInfo) {//导航过程中的信息更新,请看NaviInfo的具体说明}@Overridepublic void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {//过时}@Overridepublic void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) {}@Overridepublic void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) {}@Overridepublic void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) {}@Overridepublic void showCross(AMapNaviCross aMapNaviCross) {//显示转弯回调}@Overridepublic void hideCross() {//隐藏转弯回调}@Overridepublic void showModeCross(AMapModelCross aMapModelCross) {}@Overridepublic void hideModeCross() {}@Overridepublic void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {}@Overridepublic void showLaneInfo(AMapLaneInfo aMapLaneInfo) {//显示车道信息}@Overridepublic void hideLaneInfo() {//隐藏车道信息}@Overridepublic void notifyParallelRoad(int i) {if (i == 0) {Toast.makeText(this, "当前在主辅路过渡", Toast.LENGTH_SHORT).show();Log.d("wlx", "当前在主辅路过渡");return;}if (i == 1) {Toast.makeText(this, "当前在主路", Toast.LENGTH_SHORT).show();Log.d("wlx", "当前在主路");return;}if (i == 2) {Toast.makeText(this, "当前在辅路", Toast.LENGTH_SHORT).show();Log.d("wlx", "当前在辅路");}}@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {//已过时}@Overridepublic void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {//更新交通设施信息}@Overridepublic void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {//已过时}@Overridepublic void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {//更新巡航模式的统计信息}@Overridepublic void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {//更新巡航模式的拥堵信息}@Overridepublic void onPlayRing(int i) {}@Overridepublic void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {}@Overridepublic void onCalculateRouteFailure(AMapCalcRouteResult aMapCalcRouteResult) {}@Overridepublic void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) {}//============================下面是AMapNaviViewListener实现的方法==================================//@Overridepublic void onNaviSetting() {//底部导航设置点击回调}@Overridepublic void onNaviCancel() {finish();}@Overridepublic boolean onNaviBackClick() {return false;}@Overridepublic void onNaviMapMode(int i) {//地图的模式,锁屏或锁车}@Overridepublic void onNaviTurnClick() {//转弯view的点击回调}@Overridepublic void onNextRoadClick() {//下一个道路View点击回调}@Overridepublic void onScanViewButtonClick() {//全览按钮点击回调}@Overridepublic void onLockMap(boolean b) {//锁地图状态发生变化时回调}@Overridepublic void onNaviViewLoaded() {Log.d("wlx", "导航页面加载成功");Log.d("wlx", "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑");}@Overridepublic void onMapTypeChanged(int i) {}@Overridepublic void onNaviViewShowMode(int i) {}
}

然后是布局文件activity_navi.xml

<?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"><com.amap.api.navi.AMapNaviViewandroid:id="@+id/navi_view"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"/>
</LinearLayout>

其中有实时导航和模拟导航

@Overridepublic void onCalculateRouteSuccess(int[] ints) {//多路径算路成功回调
//        mAMapNavi.startNavi(NaviType.EMULATOR);//模拟导航mAMapNavi.startNavi(NaviType.GPS);//实时导航}

步行导航和骑行导航与驾车导航就更改一句话就可以了

@Overridepublic void onInitNaviSuccess() {//初始化成功/*** 方法: int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute); 参数:** @congestion 躲避拥堵* @avoidhightspeed 不走高速* @cost 避免收费* @hightspeed 高速优先* @multipleroute 多路径**  说明: 以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。*  注意: 不走高速与高速优先不能同时为true 高速优先与避免收费不能同时为true*/int strategy = 0;try {//再次强调,最后一个参数为true时代表多路径,否则代表单路径strategy = mAMapNavi.strategyConvert(true, true, true, false, true);} catch (Exception e) {e.printStackTrace();}mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);//起始点坐标、终点坐标、途经点坐标、strategy
//        mAMapNavi.calculateWalkRoute(new NaviLatLng(39.925846, 116.435765), new NaviLatLng(39.925846, 116.532765));//步行导航
//        mAMapNavi.calculateRideRoute(new NaviLatLng(39.925846, 116.435765), new NaviLatLng(39.925846, 116.532765));//骑行导航}

以上就实现了路线导航功能,实际开发我们需要根据实际需求来更改


http://www.ppmy.cn/news/888779.html

相关文章

高德地图(包含实时定位,线路导航,区域标记等)

转载请附带原版地址&#xff1a; https://blog.csdn.net/qq_39936103/article/details/107901255 谢谢&#xff01; 首先引入高德地图的js&#xff0c;css&#xff08;需连接外网&#xff09; <th:block th:fragment"page-css">//这里是CSS<link rel"…

如何下载高德电子地图

如何下载高德电子地图 出门在外或者到某个地方都会使用到高德电子地图进行导航&#xff0c;那有没有想过将自己看到的地图下载下来呢&#xff0c;今天就教大家一种简单的方法下载高德电子地图&#xff0c;就像下载电影一样的简单&#xff0c;只需要使用一款下载器即可——水经…

高德地图导航

高德地图导航 出发地——目的地导航界面 出发地——目的地 获取蓝点&#xff08;自己&#xff09;经纬度 //TODO:获取自己的经纬度 start_la aMap.getMyLocation().getLatitude(); start_lng aMap.getMyLocation().getLongitude(); XML <?xml version"1.0"…

html高德地图导航 跳转app

经纬度记得改一下&#xff1b; 经纬度在线获取&#xff1a; https://www.bejson.com/convert/map/ <!DOCTYPE html> <html><head lang"en"><include file"Public/header" /><style>body,#mapContainer{margin:0;height:1…

高德

高德 显示地图显示蓝标获得本地经纬度&#xff0c;加载图片到地图上导航 显示地图 public class MainActivity extends AppCompatActivity {MapView mapView;AMap aMap;MyLocationStyle myLocationStyle;String[] stringnew String[]{"android.permission.INTERNET"…

在WIN10系统中安装TIA博途V18,重启后提示安装介质不可用,请插入DVD 或检查网络连接的解决办法

在WIN10系统中安装TIA博途V18,重启后提示安装介质不可用,请插入DVD 或检查网络连接的解决办法 原因:下载的安装包为ISO文件,若没有解压缩,直接点击打开安装,则会出现这样的错误提示。 解决办法: 把安装包解压缩之后再进行安装。 安装教程可参考以下步骤: 前提条件: T…

Maya2018安装及激活教程

1. 右击软件压缩包&#xff0c;选择解压到Maya2018_64bit 2.双击打开Autodesk_Maya_2018_Win_64bit.sfx 3. 点击更改,选择解压目标文件夹&#xff0c;可在D盘或其它盘里面新建一个maya2018文件夹&#xff0c;然后点击确定 4.点击安装 5.选择我接受&#xff0c;然后点击下一步。…

Autodesk Maya 2019 安装

为什么我接触到建模了呢&#xff0c;我也不知道。只会弄点桌椅板凳简单动画&#xff0c;希望有时间更进一步学习&#xff0c;毕竟我还有一个开发游戏的梦想。 步骤&#xff1a;下载-安装-激活  Maya吧各版本合集下载  地址&#xff1a;https://pan.baidu.com/s/1beUUq3P4We…

Maya无法创建新模型解决方案1

有可能是因为Lambert材质被锁定 from maya import cmds cmds.lockNode("initialShadingGroup", l0, lu0)

maya2017打不开

maya2017打不开 控制面板 - 卸载或更改程序Repair or ReinstallRepair完成&#xff0c;现在可以正常打开maya2017了。 控制面板 - 卸载或更改程序 Repair or Reinstall Repair 完成&#xff0c;现在可以正常打开maya2017了。

Maya2013安装失败:Installing Microsoft Visual C++ 2005

工作环境(蓝色粗体字为特别注意内容) 1&#xff0c;系统环境&#xff1a;Win7 Ultimate sp1、Maya 2013 x86 打算安装Maya2013&#xff0c;发现报错 于是点击installation log file打开安装日志&#xff0c;发现如下的报错信息 2019/3/30:00:14:36 Administrator PC-2019012…

Autodesk Maya 2019中文版

安装教程 1.下载数据包后进行解压得到运行程序“Autodesk_Maya_2019_dlm.sfx.exe”&#xff0c;点击“确定”解压&#xff0c;此过程由于安装程序数据比较大消耗的时间比较长&#xff0c;请耐心等待 2.进入安装向导后点击“安装” 3.选择|我接受然后点击“下一步” 4.建议勾选…

3D可视化工具Mayavi的安装

Python Extension Packages for Windows - Christoph Gohlke (uci.edu)在这个网站下下载所需要文件&#xff0c;注意python版本 mayavi-4.7.4-cp37-cp37m-win_amd64.whl traits-6.3.2-cp37-cp37m-win_amd64.whl VTK-9.1.0-cp37-cp37m-win_amd64.whl PyQt4-4.11.4-cp37-cp37…

超全面!Autodesk Maya重安装时显示已安装的解决办法

问题如图&#xff0c;卸载后重新安装时显示某些产品已经安装&#xff0c;这是因为注册表没有完全卸载干净。这时候就别继续安装浪费时间了&#xff0c;就算安装成功也打不开的&#xff0c;直接退出安装&#xff0c;去删除注册表。 以下提供几种方法参考&#xff08;Win系统&am…

3D可视化库Mayavi安装和使用

文章目录 1 安装安装1&#xff08;成功&#xff09;安装2&#xff08;失败未解决&#xff09; 2 Mayavi的PythonAPI实用API记录mayavi.mlab.imshow()mayavi.mlab.mesh()mayavi.mlab.triangular_mesh()mayavi.mlab.points3d()mayavi.mlab.contour3d() Mayavi的官方文档链接在这里…

MAYA安装包+安装教程

1.复制链接记得删除后缀哦&#xff01;&#xff08;部分网站直接复制会自动标明出处&#xff09; 2.链接是永久链接&#xff0c;放心食用 3.版本选择建议&#xff1a;建议选择2014-2018之间版本&#xff0c;太高的版本容易有BUG MAYA2020 链接&#xff1a;https://pan.baid…

Maya 2013 下载以及破解教程

Maya下载地址&#xff1a; http://vdisk.weibo.com/s/BDn59yfnBVDXV 注册机下载地址&#xff1a;http://vdisk.weibo.com/s/BDn59yfnBVDXH 下面是安装教程 1、点击安装 2、 3、序列号&#xff1a;667-98989898 密钥&#xff1a;657E1 4、等待吧

maya2018材质编辑器无法正常显示修复方法

maya2018材质编辑器用着用着就&#xff0c;无法正常显示&#xff0c;变成空空的窗口。如下图&#xff1a; 如何解决呢&#xff1f; 1、通常的方法是到maya的用户文档&#xff0c;删除用户&#xff1a;C:\Users\Administrator\Documents\maya\2018\prefs 这个文件夹&#xff0…

Autodesk Maya 2023 三维动画建模软件中文正式版安装说明

前言 Autodesk Maya是美国Autodesk公司出品的世界顶级的三维动画软件&#xff0c;应用对象是专业的影视广告&#xff0c;角色动画&#xff0c;电影特技等。 掌握了Maya&#xff0c;会极大的提高制作效率和品质&#xff0c;调节出仿真的角色动画&#xff0c;渲染出电影一般的真…

Autodesk Maya2022安装说明,2021去哪了

简介 Autodesk Maya是美国Autodesk公司出品的世界顶级的三维动画软件&#xff0c;应用对象是专业的影视广告&#xff0c;角色动画&#xff0c;电影特技等。Maya功能完善&#xff0c;工作灵活&#xff0c;易学易用&#xff0c;制作效率极高&#xff0c;渲染真实感极强&#xff…
最新文章