高德地图之路线规划

在上一篇文章中,我们讲到了高德地图之拾取地点,今天接下来总结路线规划,整个实现的过程大致如下:

  1. 获取终点
  2. 规划路线
  3. 路线的选择与路线的绘制
  4. 路线结果的展示

首先来看看需要实现的效果:

这里写图片描述

整个布局比较简单,唯一需要注意的就是Tablayout的使用因为在在使用这个控件的时候栽过跟头,,先看看源码:

 mTabLayout = (TabLayout) findViewById(R.id.tabs);
        //tab的字体选择器,默认灰色,选择时白色
        mTabLayout.setTabTextColors(Color.LTGRAY, Color.WHITE);
        //设置tab的下划线颜色,默认是粉红色
        mTabLayout.setSelectedTabIndicatorColor(Color.WHITE);
        mTabLayout.addTab(mTabLayout.newTab().setText("驾车"));
        mTabLayout.addTab(mTabLayout.newTab().setText("步行"));
        mTabLayout.addTab(mTabLayout.newTab().setText("骑车"));

因为我当时在使用的过程中,因为增加了其它的属性,导致Tablayout的tab不能这样占满屏宽,要么是tab剧中显示,要么是居左显示,后来删除所有的属性后,直接现在这个样式了。
接下来开始总结我们上面实现的过程。

一、获取终点:

这个其实已经很简单了,因为我们上一次已经实现了高德地图之拾取地点,所以这里在点击目的地的EditText的时候调用该Activity即可,代码如下:

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.rl_tv_end:
                Intent intent = new Intent(this,PiclocationActivity.class);//拾取坐标点
                startActivityForResult(intent,0);
                endList.clear();
                break;

        }
    }
 /**
     * 获取终点信息
     * @param requestCode
     * @param resultCode
     * @param intent
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        if(resultCode==RESULT_OK){
            tvEnd.setText("到     "+intent.getStringExtra("address"));
            LatLonPoint endLp = intent.getParcelableExtra("value");
            endList.clear();
            endList.add(new NaviLatLng(endLp.getLatitude(),endLp.getLongitude()));
        }
    }

在获取终点的过程中,我们先是将终点的坐标集合清空,然后将最新的坐标点保存到集合中,并将目的地地址显示出来。

二 、规划路线:

在实现规划路线的时候,我们需要获取一个AMapNavi对象,然后实现一个导航事件监听接口——AMapNaviListener。这个接口有许多抽象方法,但是我们必须要实现的有两个方法——路线规划成功以后回调规划结果:

/**
     * 初始化AMap对象
     */
    private void initMap() {
        if (amap == null) {
           ...
            mAMapNavi = AMapNavi.getInstance(getApplicationContext());
            mAMapNavi.addAMapNaviListener(this);


        }
    }
    //多路线算路成功回调
    onCalculateMultipleRoutesSuccess(int[] routeIds)
    //步行,驾车,骑行路径规划成功后的回调函数。(单条路线)
    onCalculateRouteSuccess()
    //步行或者驾车路径规划失败后的回调函数。
    onCalculateRouteFailure(int errorInfo)

在重写上面的接口回调函数之前,我们需要先实现路线规划,因为回调函数都是成功或者失败的处理方法,所以我们先去规划,规划了以后再来重写结果的函数。
因为驾车、步行、骑行等路线的规划都是不同的函数,而且我们都需要实现,所以我们需要增加一个int值的flag,来标识不同的路线规划,该标识默认为驾车。接下来我们看看路线规划的函数:

    /**
     * 方法必须重写
     */
    @Override
    protected void onResume() {
        super.onResume();
        mapview.onResume();
        planRoute();//路线规划
    }
/**
     * 路线规划
     */
    private void planRoute() {
        mRecyclerView.setVisibility(View.GONE);//多条路线规划结果
        oneWay.setVisibility(View.GONE);//一条路线规划结果
        if(startList.size()>0 && endList.size()>0){
            if(navigationType == 0){
  //驾车
                int strategy=0;
                try {
                    /**
                     * 方法:
                     *   int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hight
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值