文档章节

导航--续

 易水寒521
发布于 2015/06/11 16:25
字数 688
阅读 212
收藏 2
点赞 0
评论 0

RouteGuideDemo

GPS导航Demo
public class RouteGuideDemo extends Activity{
    private BNaviPoint mStartPoint = new BNaviPoint(116.30142, 40.05087,
            "百度大厦", BNaviPoint.CoordinateType.GCJ02);
    private BNaviPoint mEndPoint = new BNaviPoint(116.39750, 39.90882,
            "北京天安门", BNaviPoint.CoordinateType.GCJ02);
    private List<BNaviPoint> mViaPoints = new ArrayList<BNaviPoint>();
    private Button mBtnAddViaPoint;
    
 public void onCreate(Bundle savedInstanceState){ 
  setContentView(R.layout.activity_routeguide);
  Button btnStartNavigation = (Button)findViewById(R.id.button_navigation);
  btnStartNavigation.setOnClickListener(new OnClickListener() {  
   @Override
   public void onClick(View v) {
       if (mViaPoints.size() == 0) {
           launchNavigator();
       } else {
           launchNavigatorViaPoints();       }  } }); 
  findViewById(R.id.start_nav2_btn).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                if (mViaPoints.size() == 0) {
                    launchNavigator2();               } else {                   launchNavigatorViaPoints();              }            } });  
  mBtnAddViaPoint = (Button) findViewById(R.id.add_via_btn); 
  mBtnAddViaPoint.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    addViaPoint();
                }
            });
 }
    private void addViaPoint() {
        EditText viaXEditText = (EditText) findViewById(R.id.et_via_x);
        EditText viaYEditText = (EditText) findViewById(R.id.et_via_y);
        double latitude = 0, longitude = 0;
        try {
            latitude = Integer.parseInt(viaXEditText.getText().toString());
            longitude = Integer.parseInt(viaYEditText.getText().toString());
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        BNaviPoint viaPoint = new BNaviPoint(longitude/1e5, latitude/1e5,
                "途经点" + (mViaPoints.size()+1));
        mViaPoints.add(viaPoint);
        Toast.makeText(this, "已添加途经点:" + viaPoint.getName(),
                Toast.LENGTH_SHORT).show();
        if (mViaPoints.size() >= 3) {
            mBtnAddViaPoint.setEnabled(false);        }   }
 
 }
    private void launchNavigator2(){
        BNaviPoint startPoint = new BNaviPoint(116.307854,40.055878,
                "百度大厦", BNaviPoint.CoordinateType.BD09_MC);
        BNaviPoint endPoint = new BNaviPoint(116.403875,39.915168,
                "北京天安门", BNaviPoint.CoordinateType.BD09_MC);
        BaiduNaviManager.getInstance().launchNavigator(this,
                startPoint,                                      //起点(可指定坐标系)
                endPoint,                                        //终点(可指定坐标系)
                NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,       //算路方式
                true,                                            //真实导航
                BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY, //在离线策略
                new OnStartNavigationListener() {                //跳转监听
                    
                    @Override
                    public void onJumpToNavigator(Bundle configParams) {
                        Intent intent = new Intent(RouteGuideDemo.this, BNavigatorActivity.class);
                        intent.putExtras(configParams);
                        startActivity(intent);                    }                    
                    @Override
                    public void onJumpToDownloader() {                    }                });    }
    private void launchNavigatorViaPoints(){
        List<BNaviPoint> points = new ArrayList<BNaviPoint>();
    
        BaiduNaviManager.getInstance().launchNavigator(this,
                points,                                          //路线点列表
                NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,       //算路方式
                true,                                            //真实导航
                BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY, //在离线策略
                new OnStartNavigationListener() {                //跳转监听

                  RoutePlanDemo
 package com.baidu.navi.sdkdemo;
public class RoutePlanDemo extends Activity {
 private RoutePlanModel mRoutePlanModel = null;
 private MapGLSurfaceView mMapView = null; 
 public void onCreate(Bundle savedInstance) {
  super.onCreate(savedInstance);
  setContentView(R.layout.activity_routeplan); 
  findViewById(R.id.online_calc_btn).setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View arg0) {
    startCalcRoute(NL_Net_Mode.NL_Net_Mode_OnLine);   }  });
  findViewById(R.id.simulate_btn).setOnClickListener(
    new OnClickListener() {
     @Override
     public void onClick(View arg0) {
      startNavi(false);     }    });
  findViewById(R.id.real_btn).setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View arg0) {
    PreferenceHelper.getInstance(getApplicationContext())
      .putBoolean(SettingParams.Key.SP_TRACK_LOCATE_GUIDE,
        false);
    startNavi(true);   }  }); }    
 @Override
 public void onDestroy() {
  super.onDestroy(); }
 @Override
 public void onPause() {
  super.onPause();
  BNRoutePlaner.getInstance().setRouteResultObserver(null);
  ((ViewGroup) (findViewById(R.id.mapview_layout))).removeAllViews();  BNMapController.getInstance().onPause(); }
 @Override
 public void onResume() {
  super.onResume();
  initMapView();
  ((ViewGroup) (findViewById(R.id.mapview_layout))).addView(mMapView);
  BNMapController.getInstance().onResume(); }
    private void initMapView() {
        if (Build.VERSION.SDK_INT < 14) {
            BaiduNaviManager.getInstance().destroyNMapView();       }        
        mMapView = BaiduNaviManager.getInstance().createNMapView(this);
        BNMapController.getInstance().setLevel(14);
        BNMapController.getInstance().setLayerMode(
                LayerMode.MAP_LAYER_MODE_BROWSE_MAP);
        updateCompassPosition();
        BNMapController.getInstance().locateWithAnimation(
                (int) (113.97348 * 1e5), (int) (22.53951 * 1e5));    }
 private void updateCompassPosition(){
  int screenW = this.getResources().getDisplayMetrics().widthPixels;
  BNMapController.getInstance().resetCompassPosition(
    screenW - ScreenUtil.dip2px(this, 30),
     ScreenUtil.dip2px(this, 126), -1); }
 private void startCalcRoute(int netmode) {
  EditText startXEditText = (EditText) findViewById(R.id.et_start_x);
  EditText startYEditText = (EditText) findViewById(R.id.et_start_y);
  EditText endXEditText = (EditText) findViewById(R.id.et_end_x);
  EditText endYEditText = (EditText) findViewById(R.id.et_end_y);
  int sX = 0, sY = 0, eX = 0, eY = 0;
  try {
   sX = Integer.parseInt(startXEditText.getText().toString());
   sY = Integer.parseInt(startYEditText.getText().toString());
   eX = Integer.parseInt(endXEditText.getText().toString());
   eY = Integer.parseInt(endYEditText.getText().toString());
  } catch (Exception e) {
   e.printStackTrace();
  }  
  RoutePlanNode startNode = new RoutePlanNode(sX, sY,
    RoutePlanNode.FROM_MAP_POINT, "华侨城", "华侨城");
  RoutePlanNode endNode = new RoutePlanNode(eX, eY,
    RoutePlanNode.FROM_MAP_POINT, "滨海苑", "滨海苑");
  ArrayList<RoutePlanNode> nodeList = new ArrayList<RoutePlanNode>(2);
  nodeList.add(startNode);
  nodeList.add(endNode);
  BNRoutePlaner.getInstance().setObserver(new RoutePlanObserver(this, null));
  BNRoutePlaner.getInstance().setCalcMode(NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME);
  BNRoutePlaner.getInstance().setRouteResultObserver(mRouteResultObserver);
  boolean ret = BNRoutePlaner.getInstance().setPointsToCalcRoute(
    nodeList,NL_Net_Mode.NL_Net_Mode_OnLine);
  if(!ret){
   Toast.makeText(this, "规划失败", Toast.LENGTH_SHORT).show();  } }
 private void startNavi(boolean isReal) {
  if (mRoutePlanModel == null) {
   Toast.makeText(this, "请先算路!", Toast.LENGTH_LONG).show();
   return;  }
  RoutePlanNode startNode = mRoutePlanModel.getStartNode();
  RoutePlanNode endNode = mRoutePlanModel.getEndNode();
  if (null == startNode || null == endNode) {
   return;
  }
  int calcMode = BNRoutePlaner.getInstance().getCalcMode();
  Bundle bundle = new Bundle();
  bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_VIEW_MODE,
    BNavigator.CONFIG_VIEW_MODE_INFLATE_MAP);
  bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_CALCROUTE_DONE,
    BNavigator.CONFIG_CLACROUTE_DONE);
  bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_START_X,
    startNode.getLongitudeE6());
  bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_START_Y,
    startNode.getLatitudeE6());
  bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_END_X, endNode.getLongitudeE6());
  bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_END_Y, endNode.getLatitudeE6());
  bundle.putString(BNavConfig.KEY_ROUTEGUIDE_START_NAME,
    mRoutePlanModel.getStartName(this, false));
  bundle.putString(BNavConfig.KEY_ROUTEGUIDE_END_NAME,
    mRoutePlanModel.getEndName(this, false));
  bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_CALCROUTE_MODE, calcMode);
  if (!isReal) {
   bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_LOCATE_MODE,
     RGLocationMode.NE_Locate_Mode_RouteDemoGPS);
  } else {
   bundle.putInt(BNavConfig.KEY_ROUTEGUIDE_LOCATE_MODE,
     RGLocationMode.NE_Locate_Mode_GPS);
  } 
  Intent intent = new Intent(RoutePlanDemo.this, BNavigatorActivity.class);
  intent.putExtras(bundle);
  startActivity(intent);
 }
 private IRouteResultObserver mRouteResultObserver = new IRouteResultObserver() {
  @Override
  public void onRoutePlanYawingSuccess() {
  }
  @Override
  public void onRoutePlanYawingFail() {
  }
  @Override
  public void onRoutePlanSuccess() {
   BNMapController.getInstance().setLayerMode(
     LayerMode.MAP_LAYER_MODE_ROUTE_DETAIL);
   mRoutePlanModel = (RoutePlanModel) NaviDataEngine.getInstance()
     .getModel(ModelName.ROUTE_PLAN);
  }
  @Override
  public void onRoutePlanFail() {
  }
  @Override
  public void onRoutePlanCanceled() {  }
  @Override
  public void onRoutePlanStart() {  } };}

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 129
码字总数 120077
作品 0
虹口
缓存篇(Cache)~第二回 使用static静态成员实现服务器端缓存(导航面包屑)~续

在写完首篇cache文章后,有些朋友给我来信,希望可以使用JS的方法来实现这个导航功能,所以,才有了这篇文章,JS与C#不同,它虽然有引用类型,但它不具备一些引用类型的特性,如它的方法...

mcy247 ⋅ 2017/12/06 ⋅ 0

EF架构~系列目录

EF架构系列主是我在项目开发中,总结出现的一些经验性的东西,拿出来与大家分享,哪块与的有问题,还请大家指出来,然后我们一些再去讲究! EF架构~系列目录 第一回  EF架构~了解一下,ADO....

mcy247 ⋅ 2017/12/05 ⋅ 0

雨林木风115网盘融资过亿 或分拆上市

据可靠消息人士透露,雨林木风旗下网盘服务提供商——115网盘正在筹备融资,金额过亿元。该知情人士进一步透露,未来115网盘将从雨林木风体系 分拆,可能会成立公司独立运营。据了解,此次融...

老枪 ⋅ 2011/03/14 ⋅ 31

人工智能公司ILIFE智意发布新品X800 首创震动水箱清洁技术

     4月24日消息,继上月黑科技产品W400亮相AWE展后,人工智能公司ILIFE智意今天正式发布年度旗舰产品天耀X800。据悉,这是自去年ILIFE智意天目X660发售以来,ILIFE智意推出的第二代视觉...

人工智能那点事 ⋅ 04/24 ⋅ 0

抢到就赚到 ILIFE智意首款视觉导航扫地机器人X660天猫启动促销

  随着人们生活水平的提高,我们家中的家电也越来越多,这些产品为我们日常生活带来了很多便捷,大大提高了我们的生活品质,其中扫地机器人便是仅今年热度非常高的居家生活必备产品。   ...

人工智能那点事 ⋅ 01/31 ⋅ 0

C# WinForm开发系列 - XML/XSLT/XPATH

XML在WinForm, Asp.Net, Java, AJAX开发等方面应用, 以及对XML文档基本操作,如XPath检索节点. 当前XML被广泛应用与配置保存, 简单数据存储, 跨平台数据传输, 其身影活跃于Web Services, AJA...

长征2号 ⋅ 2017/07/09 ⋅ 0

爱奇艺、优酷、腾讯视频竞品分析报告2016(二)

接上一篇《爱奇艺、优酷、腾讯视频竞品分析报告2016(一)》 http://milkyqueen520.blog.51cto.com/11233158/1760192 2.4 产品设计与交互 2.4.1 视觉风格 APP设计风格从视觉效果上至少给用户...

milkyqueen ⋅ 2016/04/04 ⋅ 0

如何解决谷歌浏览器中被嵌入360导航的问题

首先,之所以说360是流氓不仅是它在未经我授权的情况下私自篡改我的浏览器主页,最关键的是它还无法通过谷歌浏览器的设置-启动时-打开特定网页或特定网页进行重新设置,更别提到设置-显示高级...

XiaoLeei ⋅ 2016/11/05 ⋅ 0

解读断点续传的基本原理

断点续传的理解可以分为两部分:一部分是断点,一部分是续传。断点的由来是在下载过程中,将一个下载文件分成了多个部分,同时进行多个部分一起 的下载,当某个时间点,任务被暂停了,此时下...

bengozhong ⋅ 2016/08/31 ⋅ 0

【新功能】ECS已过期实例续费变配功能上线

中国站ECS控制台,现已支持已过期的实例续费时,对实例规格进行变配。 功能特点 已过期实例续费变配与过去的续费降配有三点区别: 续费变配只可以续费同时修改实例规格配置,不可以修改带宽。...

郁苍 ⋅ 04/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部