我是靠谱客的博主 机灵犀牛,最近开发中收集的这篇文章主要介绍Android 高德的路线规划一个小坑,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近用到了高德地图的路线规划。。这个时候。。发现了个小问题。就是,起点和终点之间的距离过长时,骑行的路线规划,,就会很长时间,甚至规划不出来。。。

造成这个问题的原因就是之间的距离过长了,,用骑行的路线规划不合适,我也没仔细找这个距离具体是多少。。。如果遇到这个问题,你可以先计算下两点之间的距离。,然后如果大于一个距离,就把路线规划换成驾车的路线规划。

 LatLng latLng=new LatLng(mStartPoint.getLatitude(),mStartPoint.getLongitude());
                            LatLng latLng1=new LatLng(mEndPoint.getLatitude(),mEndPoint.getLongitude());
                            float v = AMapUtils.calculateLineDistance(latLng, latLng1);
                            Log.e("zmm","距离-->"+v);
                            if(v>3000){
                                curType=1;
                                searchRouteResult(RouteSearch.DrivingDefault,TYPE_DRIVE);
                            }else{
                                curType=1;
                                searchRouteResult(RouteSearch.RidingDefault,TYPE_RIDE);
                            }
/**
 * 开始搜索路径规划方案
 */
public void searchRouteResult(int mode,int type) {
    Log.e("zmm","searchRouteResult");
    if (mStartPoint == null) {
        ToastUtil.show(GaoMipActivity.this, "定位中,稍后再试...");
        return;
    }
    if (mEndPoint == null) {
        ToastUtil.show(GaoMipActivity.this, "终点未设置");
    }
    final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(mStartPoint, mEndPoint);

    if(type==TYPE_DRIVE){
        RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, mode, null, null, "");
        mRouteSearch.calculateDriveRouteAsyn(query);
    }else{
        RouteSearch.RideRouteQuery query1 = new RouteSearch.RideRouteQuery(fromAndTo, mode);
        mRouteSearch.calculateRideRouteAsyn(query1);// 异步路径规划骑行模式查询
    }
}
 /**
     * 驾车的路线规划成功以后的回调
     * @param result
     * @param errorCode
     */
    @Override
    public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {


        dissmissProgressDialog();
        aMap.clear();// 清理地图上的所有覆盖物
//        Log.e("zmm","-->"+errorCode);
        if (errorCode == 1000) {
            if (result != null && result.getPaths() != null) {
                if (result.getPaths().size() > 0) {
                    emptyView.hideView();
                    mDriveRouteResult = result;
                    final DrivePath drivePath = mDriveRouteResult.getPaths()
                            .get(0);
                    DrivingRouteOverLay drivingRouteOverlay = new DrivingRouteOverLay(
                            GaoMipActivity.this, aMap, drivePath,
                            mDriveRouteResult.getStartPos(),
                            mDriveRouteResult.getTargetPos(), null);
                    drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
                    drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
                    drivingRouteOverlay.removeFromMap();
                    drivingRouteOverlay.addToMap();
                    drivingRouteOverlay.zoomToSpan();
                    mBottomLayout.setVisibility(View.VISIBLE);
                    int dis = (int) drivePath.getDistance();
                    int dur = (int) drivePath.getDuration();
                    String des = AMapUtil.getFriendlyTime(dur)+"("+AMapUtil.getFriendlyLength(dis)+")";
                    mRotueTimeDes.setText(des);
                    mRouteDetailDes.setVisibility(View.VISIBLE);
                    int taxiCost = (int) mDriveRouteResult.getTaxiCost();
                    mRouteDetailDes.setText("打车约"+taxiCost+"元");
                    mBottomLayout.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(GaoMipActivity.this,
                                    DriveRouteDetailActivity.class);
                            intent.putExtra("drive_path", drivePath);
                            intent.putExtra("drive_result",
                                    mDriveRouteResult);
                            startActivity(intent);
                        }
                    });
                } else if (result != null && result.getPaths() == null) {
                    ToastUtil.show(GaoMipActivity.this, R.string.no_result);
                    emptyView.hideView();
                }

            } else {
                ToastUtil.show(GaoMipActivity.this, R.string.no_result);
                emptyView.hideView();
            }
        } else {
            ToastUtil.show(this.getApplicationContext(), errorCode);
            emptyView.showErrorView();
            emptyView.setRetryBtnListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    searchRouteResult(RouteSearch.RidingDefault,curType);
                }
            });
        }

    }

    @Override
    public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {

    }

    /**
     * 骑行路线规划成功以后的回调
     * @param result
     * @param errorCode
     */
    @Override
    public void onRideRouteSearched(RideRouteResult result, int errorCode) {
        dissmissProgressDialog();
        aMap.clear();// 清理地图上的所有覆盖物
        if (errorCode == 1000) {
            if (result != null && result.getPaths() != null) {
                if (result.getPaths().size() > 0) {
                    emptyView.hideView();
                    mRideRouteResult = result;
                    final RidePath ridePath = mRideRouteResult.getPaths()
                            .get(0);
                    RideRouteOverlay rideRouteOverlay = new RideRouteOverlay(
                            this, aMap, ridePath,
                            mRideRouteResult.getStartPos(),
                            mRideRouteResult.getTargetPos());
                    rideRouteOverlay.removeFromMap();
                    rideRouteOverlay.addToMap();
                    rideRouteOverlay.zoomToSpan();
                    rideRouteOverlay.setNodeIconVisibility(false);//设置是否显示路段节点图标
                    mBottomLayout.setVisibility(View.VISIBLE);
                    int dis = (int) ridePath.getDistance();
                    int dur = (int) ridePath.getDuration();
                    String des = AMapUtil.getFriendlyTime(dur) + "(" + AMapUtil.getFriendlyLength(dis) + ")";
                    mRotueTimeDes.setText(des);
                    mRouteDetailDes.setVisibility(View.GONE);
                    mBottomLayout.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(GaoMipActivity.this,
                                    RideRouteDetailActivity.class);
                            intent.putExtra("ride_path", ridePath);
                            intent.putExtra("ride_result",
                                    mRideRouteResult);
                            startActivity(intent);
                        }
                    });
                } else if (result != null && result.getPaths() == null) {
                    ToastUtil.show(GaoMipActivity.this, R.string.no_result);
                    emptyView.hideView();
                    emptyView.showEmptyView();

                }
            } else {
                emptyView.hideView();
                emptyView.showEmptyView();
                ToastUtil.show(GaoMipActivity.this, R.string.no_result);
            }
        } else {
            ToastUtil.show(this.getApplicationContext(), errorCode);
            emptyView.showErrorView();
            emptyView.setRetryBtnListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    searchRouteResult(RouteSearch.RidingDefault,curType);
                }
            });
        }
    }

如果就算是长距离的也想用骑行的路线规划。。我们可以稍微伪装下,当然,这个时候算出来的时间是不对的,因为用的是驾驶的速度来算的时间,你可以在驾驶的回调里面,把驾驶的速度修改下,就可以了。。。

写的有不妥的地方,望见谅。。。
最后:每日一语录:
只要路是对的,就不要害怕它是短暂还是遥远,你终究会到达。。。

最后

以上就是机灵犀牛为你收集整理的Android 高德的路线规划一个小坑的全部内容,希望文章能够帮你解决Android 高德的路线规划一个小坑所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部