iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >android实现定位与目的地的导航示例代码
  • 350
分享到

android实现定位与目的地的导航示例代码

示例定位Android 2022-06-06 04:06:20 350人浏览 泡泡鱼
摘要

今天无意中看到技术大神利用百度地图定位并实现目的地导航的Demo。觉得很不错,就转载过来一起分享,下面我们看实现效果:     &n

今天无意中看到技术大神利用百度地图定位并实现目的地导航的Demo。觉得很不错,就转载过来一起分享,下面我们看实现效果:

这里写图片描述      这里写图片描述 

进入后首先会得到当前位置,在地图上显示出来,在输入框中输入目的地后,就会在地图上出现最佳线路,我这里设置的是距离最小的驾车线路,另外还有公交线路、步行线路,在代码中都有详细注释。另外,在控制台还输出了线路上每一个节点的信息以及起始位置和目的地的距离,信息显示的是在当前节点的导航信息。如下图:

这里写图片描述 

接下来就看如何实现了,首先,注册百度开发者账号,并进入百度地图api查看相关资料百度地图API,然后就是为需要加入地图的应用注册APP KEY,注册完后,下载百度地图jar文件,新建工程,并导入即可,下面看实现具体代码,在代码中有详细注释:


public class NavigationDemoActivity extends MapActivity { 
  private String mMapKey = "注册自己的key"; 
  private EditText destinationEditText = null; 
  private Button startNaviButton = null; 
  private MapView mapView = null; 
  private BMapManager mMapManager = null; 
  private MyLocationOverlay myLocationOverlay = null; 
  //onResume时注册此listener,onPause时需要Remove,注意此listener不是Android自带的,是百度API中的 
  private LocationListener locationListener; 
  private MKSearch searchModel; 
  GeoPoint pt; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 
    destinationEditText = (EditText) this.findViewById(R.id.et_destination); 
    startNaviButton = (Button) this.findViewById(R.id.btn_navi); 
    mMapManager = new BMapManager(getApplication()); 
    mMapManager.init(mMapKey, new MyGeneralListener()); 
    super.initMapActivity(mMapManager); 
    mapView = (MapView) this.findViewById(R.id.bmapsView); 
    //设置启用内置的缩放控件 
    mapView.setBuiltInZoomControls(true);  
    //设置在缩放动画过程中也显示overlay,默认为不绘制 
//    mapView.setDrawOverlayWhenZooming(true); 
    //获取当前位置层 
    myLocationOverlay = new MyLocationOverlay(this, mapView); 
    //将当前位置的层添加到地图底层中 
    mapView.getOverlays().add(myLocationOverlay); 
    // 注册定位事件 
    locationListener = new LocationListener(){ 
      @Override 
      public void onLocationChanged(Location location) { 
        if (location != null){ 
          //生成GEO类型坐标并在地图上定位到该坐标标示的地点 
           pt = new GeoPoint((int)(location.getLatitude()*1e6), 
              (int)(location.getLongitude()*1e6)); 
//         System.out.println("---"+location.getLatitude() +":"+location.getLongitude()); 
          mapView.getController().animateTo(pt); 
        } 
      } 
    }; 
    //初始化搜索模块 
    searchModel = new MKSearch(); 
    //设置路线策略为最短距离 
    searchModel.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST); 
    searchModel.init(mMapManager, new MKSearchListener() { 
      //获取驾车路线回调方法 
      @Override 
      public void onGetDrivingRouteResult(MKDrivingRouteResult res, int error) { 
        // 错误号可参考MKEvent中的定义 
        if (error != 0 || res == null) { 
          Toast.makeText(NavigationDemoActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show(); 
          return; 
        } 
        RouteOverlay routeOverlay = new RouteOverlay(NavigationDemoActivity.this, mapView); 
        // 此处仅展示一个方案作为示例 
        MKRoute route = res.getPlan(0).getRoute(0); 
        int distanceM = route.getDistance(); 
        String distanceKm = String.valueOf(distanceM / 1000) +"."+String.valueOf(distanceM % 1000); 
        System.out.println("距离:"+distanceKm+"公里---节点数量:"+route.getNumSteps()); 
        for (int i = 0; i < route.getNumSteps(); i++) { 
          MKStep step = route.getStep(i); 
          System.out.println("节点信息:"+step.getContent()); 
        } 
        routeOverlay.setData(route); 
        mapView.getOverlays().clear(); 
        mapView.getOverlays().add(routeOverlay); 
        mapView.invalidate(); 
        mapView.getController().animateTo(res.getStart().pt); 
      } 
      //以下两种方式和上面的驾车方案实现方法一样 
      @Override 
      public void onGetWalkingRouteResult(MKWalkingRouteResult res, int error) { 
        //获取步行路线 
      } 
      @Override 
      public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) { 
        //获取公交线路 
      } 
      @Override 
      public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) { 
      } 
      @Override 
      public void onGetAddrResult(MKAddrInfo arg0, int arg1) { 
      } 
      @Override 
      public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) { 
      } 
      @Override 
      public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) { 
      } 
    }); 
    startNaviButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        String destination = destinationEditText.getText().toString(); 
        //设置起始地(当前位置) 
        MKPlannode startNode = new MKPlanNode(); 
        startNode.pt = pt; 
        //设置目的地 
        MKPlanNode endNode = new MKPlanNode();  
        endNode.name = destination; 
        //展开搜索的城市 
        String city = getResources().getString(R.string.beijing); 
//       System.out.println("----"+city+"---"+destination+"---"+pt); 
        searchModel.drivingSearch(city, startNode, city, endNode); 
        //步行路线 
//       searchModel.walkingSearch(city, startNode, city, endNode); 
        //公交路线 
//       searchModel.transitSearch(city, startNode, endNode); 
      } 
    }); 
  } 
  @Override 
  protected void onResume() { 
    mMapManager.getLocationManager().requestLocationUpdates(locationListener); 
    myLocationOverlay.enableMyLocation(); 
    myLocationOverlay.enableCompass(); // 打开指南针 
    mMapManager.start(); 
    super.onResume(); 
  } 
  @Override 
  protected void onPause() { 
    mMapManager.getLocationManager().removeUpdates(locationListener); 
    myLocationOverlay.disableMyLocation();//显示当前位置 
    myLocationOverlay.disableCompass(); // 关闭指南针 
    mMapManager.stop(); 
    super.onPause(); 
  } 
  @Override 
  protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
  } 
  // 常用事件监听,用来处理通常的网络错误,授权验证错误等 
  class MyGeneralListener implements MKGeneralListener { 
      @Override 
      public void onGetNetworkState(int iError) { 
        Log.d("MyGeneralListener", "onGetNetworkState error is "+ iError); 
        Toast.makeText(NavigationDemoActivity.this, "您的网络出错啦!", 
            Toast.LENGTH_LONG).show(); 
      } 
      @Override 
      public void onGetPermissionState(int iError) { 
        Log.d("MyGeneralListener", "onGetPermissionState error is "+ iError); 
        if (iError == MKEvent.ERROR_PERMISSION_DENIED) { 
          // 授权Key错误: 
          Toast.makeText(NavigationDemoActivity.this,  
              "请在BMapApiDemoApp.java文件输入正确的授权Key!", 
              Toast.LENGTH_LONG).show(); 
        } 
      } 
    } 
} 

然后是布局文件:


<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:orientation="vertical" > 
  <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="18sp" 
      android:text="Destination:" /> 
    <EditText 
      android:id="@+id/et_destination" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
  </LinearLayout> 
  <Button  
    android:id="@+id/btn_navi" 
    android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Start navigate"/> 
  <com.baidu.mapapi.MapView 
    android:id="@+id/bmapsView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:clickable="true" /> 
</LinearLayout> 

AndroidMainifest.xml


<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  package="com.eriCSSonlabs" 
  android:versionCode="1" 
  android:versionName="1.0" > 
  <uses-sdk android:minSdkVersion="8" /> 
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 
  <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  
  <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
  <supports-screens android:largeScreens="true" 
    android:nORMalScreens="true" android:smallScreens="true" 
    android:resizeable="true" android:anyDensity="true"/> 
  <uses-sdk android:minSdkVersion="3"></uses-sdk> 
  <application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
      android:name=".NavigationDemoActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <cateGory android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
  </application> 
</manifest> 

上面就是实现百度地图定位和目的地的导航的所有代码啦,不知道是不是你们想要的呢?

您可能感兴趣的文章:android基本控件ToggleButton&Switch使用指南Android控件之ToggleButton的使用方法Android之侧滑菜单DrawerLayout的使用介绍Android中Okhttp3实现上传多张图片同时传递参数Android自定义View实现随手势滑动控件Android之RecyclerView轻松实现下拉刷新和加载更多示例Android实现微信摇骰子游戏Android实现计步进度的环形ProgressAndroid自定义谷歌风格ProgressBarAndroid源码解析之属性动画详解Android ToggleButton 详解及实例代码


--结束END--

本文标题: android实现定位与目的地的导航示例代码

本文链接: https://www.lsjlt.com/news/22273.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android开发中如何实现一个定位与目的地导航功能
    本篇文章为大家展示了android开发中如何实现一个定位与目的地导航功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。效果:        ...
    99+
    2023-05-31
    android roi
  • Android实现字母导航控件的示例代码
    目录自定义属性Measure测量坐标计算绘制Touch事件处理数据组装显示效果今天分享一个以前实现的通讯录字母导航控件,下面自定义一个类似通讯录的字母导航 View,可以知道需要自定...
    99+
    2024-04-02
  • Android侧滑导航栏的实例代码
    今天学习的新内容是侧滑导航栏,我想大家肯定都比较熟悉了,因为这个效果在qq里面也有,最近一直跟室友们玩的游戏是快速让自己的头像的点赞量上千。当然我的效果跟qq是没有办法比的,因为那里面的功能是在是太强大了。下面我来展示一下我做的效果截图。我...
    99+
    2023-05-31
    android 侧滑 导航栏
  • react+zarm实现底部导航栏的示例代码
    目录需要实现的效果实现过程1.使用 prop-types 库进行类型检查2.使用 useNavigate3.编写标签栏组件4.使用标签栏组件5.添加对应的页面路由6.效果参考资料需要...
    99+
    2024-04-02
  • ANDROID BottomNavigationBar底部导航栏的实现示例
    第一种介绍的就是使用开源库,因为使用开源库最简单,也更加的符合我们的审美标准,同时BottomNavigationBar还是符合当前的Material Design标准的。效果展示依赖compile'com.ashokvarma.andro...
    99+
    2023-05-30
    android bottomnavigationbar ott
  • Flutter仿微信通讯录实现自定义导航条的示例代码
    某些页面比如我们在选择联系人或者某个城市的时候需要快速定位到我们需要的选项,一般都会需要像微信通讯录右边有一个导航条一样的功能,由A到Z进行快速定位,本篇文章我们将自己来实现一个跟微...
    99+
    2024-04-02
  • vue实现tagsview多页签导航功能的示例代码
    目录前言一、效果图二、实现思路1. 新建 tags-view.js2. 在Vuex里面引入 tags-view.js3. 新建 tabsView 组件4. 新建 ScrollPane...
    99+
    2022-11-13
    vue tagsview多页签导航 vue 多页签导航
  • Python使用Qt5实现水平导航栏的示例代码
    在 Qt5 中可以使用 QWidget 包含两个水平布局,通过点击水平布局里的按钮,实现下标滑动与页面的切换。 可以按照以下步骤来实现上面图片中的功能: 导入必要的 Qt 包: f...
    99+
    2023-03-06
    Qt5 水平导航栏 Qt5 导航栏
  • Android中集成高德地图SDK实现地图定位和导航功能(二)
    我们接着上一篇文章开始继续实现android中集成高德地图的SDK实现地图 定位,搜索,导航的功能 如何让地图在手机上实现呢? 1.配置AndroidManifest 中的权限申请 可以参考官方文档 ...
    99+
    2023-09-04
    android java 开发语言 android studio
  • web开发中Tab导航的示例代码
    这篇文章主要介绍web开发中Tab导航的示例代码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 在网页中应用选项卡可以使网页显得更紧凑,结合AJAX技术可以使页面在有限的空间内展现...
    99+
    2024-04-02
  • Vue实现侧边导航栏于Tab页关联的示例代码
    目录技术栈效果分析技术栈 侧边栏用 Antdtab使用element 效果 <template> <div class="main-...
    99+
    2024-04-02
  • JS电梯导航的实现示例
    目录预览效果主要的js代码整体代码预览效果 之前css 利用 scroll-behavior 和 锚点 实现了 电梯导航,点击可以看这篇文章css实现电梯导航的效果。评论区有人想让我...
    99+
    2023-05-19
    JS电梯导航
  • QT编写地图实现设备点位的示例代码
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 在学习JS语法的时候发现其实程序都大同小异,正所谓一通百通,熟悉各大概的语法以后基本都可以上手,和C++最大的不同...
    99+
    2024-04-02
  • JavaScript实现导入导出excel的示例代码
    目录Excel导入实现方式1实现方式2Excel导出Excel导入 先下包(xlsx) npm i xlsx 把数组里面中文的键修改成英文的键: 原因:因为中文的键后台不认识,只能修...
    99+
    2024-04-02
  • Android 中ActionBar+fragment实现页面导航的实例
    Android 中ActionBar+fragment实现页面导航的实例为保证android2.0以上均能运行,使用support.v7库下的actionbar及fragment继承自AppCompatActivity(ActionBarA...
    99+
    2023-05-30
    android actionbar fragment
  • Android实现IP地址输入框的方法示例代码
    前言本文主要给大家介绍了关于Android实现IP地址格式输入框的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。实现效果图:解决方案:      1.添加4个Ed...
    99+
    2023-05-30
    android ip地址 输入框
  • 浅析php怎么实现滚动隐藏导航(代码示例)
    在网页设计中,导航栏是网页的一个重要组成部分之一,其作用是方便用户访问不同页面和功能。然而,对于一些需要保持页面美观性和简洁性的项目,通常会采用滚动隐藏导航。这种技术既可以改善用户体验,也可以节省页面空间。在本文中,将分享一些基于PHP语言...
    99+
    2023-05-14
  • Android编程实现的简易路径导航条功能示例
    本文实例讲述了Android编程实现的简易路径导航条功能。分享给大家供大家参考,具体如下:这里要实现的是如图所示的路径导航条, 类似于文件管理器的效果。该导航条包含三个功能: 支持追加任意个子路径(文字一行写不下时可左右滑动);2. 支持返...
    99+
    2023-05-31
    android 路径 导航
  • 如何实现Android导航栏功能项的显示与屏蔽
    这篇文章给大家分享的是有关如何实现Android导航栏功能项的显示与屏蔽的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 Android 的导航栏有诸多功能,例入 截屏,音量加,音量减,最近任务,菜单.返...
    99+
    2023-06-22
  • Vue实现动态路由导航的示例
    目录1、导航守卫二、功能展示 三、原理四、功能实现⛵小结1、导航守卫 “导航” 表示路由正在发生改变 正如其名,vue-router 提供的导航守卫...
    99+
    2023-02-24
    Vue 动态路由导航 Vue 路由导航
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作