android 百度地图获取两个坐标的实际路线距离

    12.2    青岛  晴

    前些天看了下百度地图的api,找到了几个不错的方法,拿出来分享下,导百度地图的jar包后项目较大,没法上传csdn,想要源码的留邮箱。

    百度地图有个导航功能,可以获取到两个坐标的导航地图,指定路线进行导航,但是百度文档中好像并没有明确的指出怎样获取这些路线的距离(驾车,步行路线等等),经过研究发现,我们可以不使用百度的那个导航地图而获取到导航路线的距离。

     先上一波效果图:

    

    第一张是百度地图的驾车导航,第二张是研究的,查询的地点是青岛市汽车东站附近到中海国际社区朗园,第二张是通过点击地图获取坐标来查询的路线距离会有误差,实测不是很大。

    废话不多说直接介绍做法:

    1.百度地图的sdk你得有吧,像那些基础定位,检索功能,计算工具,导航功能你得有吧,看文档完整的导入。

    2.将下面的代码放到适当的地方使用

 private void searchRoute(BNRoutePlanNode sNode, BNRoutePlanNode eNode) {

        BNRoutePlanNode bp1 = sNode;
        BNRoutePlanNode bp2 = eNode;


        RoutePlanSearch search = RoutePlanSearch.newInstance();        //百度的搜索路线的类
        DrivingRoutePlanOption drivingRoutePlanOption = new DrivingRoutePlanOption();
        //起始坐标和终点坐标
        PlanNode startPlanNode = PlanNode.withLocation(new LatLng(bp1.getLatitude(), bp1.getLongitude()));  // lat  long
        PlanNode endPlanNode = PlanNode.withLocation(new LatLng(bp2.getLatitude(), bp2.getLongitude()));
        drivingRoutePlanOption.from(startPlanNode);
        drivingRoutePlanOption.to(endPlanNode);
        search.drivingSearch(drivingRoutePlanOption);


        search.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {   //搜索完成的回调
            @Override
            public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {   //步行路线
                if (walkingRouteResult.getRouteLines() == null) return;
                int duration = walkingRouteResult.getRouteLines().get(0).getDuration();
                Toast.makeText(context, duration + "米", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {
            }

            @Override
            public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {     //驾车路线
                if (drivingRouteResult.getRouteLines() == null) {
                    Toast.makeText(context, "算路失败", Toast.LENGTH_SHORT).show();
                    return;
                }
                int duration = drivingRouteResult.getRouteLines().get(0).getDistance();
                Toast.makeText(context, "距离是:" + duration + "米", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {

            }
        });
    }

其实百度的api中的类,方法挺多的,只是好多没写在文档上,这里面的这几个类都是在百度架包com.baidu.mapapi.search.route下面,有兴趣的朋友可以多项研究研究。

RoutePlanSearch:看名字就知道这玩意是搜索路径的

这里面有    public boolean walkingSearch(WalkingRoutePlanOption var1) 
                  public boolean transitSearch(TransitRoutePlanOption var1) 
 public boolean drivingSearch(DrivingRoutePlanOption var1) 
 public boolean bikingSearch(BikingRoutePlanOption var1) 

这么几个有用的方法,分别是搜索步行、地铁、驾车、自行车的路线,每个方法传入的实体也不同但是都差不多,都是.from  .to  传进去起始和结束的坐标。然后在set给搜索完成的回调OnGetRoutePlanResultListener()这个是公用的,也有四个不同的借口回调方法。我这用了驾车,其他的可以自行测试。

     关于坐标点,百度有自己的一套

        BNRoutePlanNode sNode = new BNRoutePlanNode(llstart.longitude, llstart.latitude, "", null, CoordinateType.GCJ02);      //新建两个坐标点
        BNRoutePlanNode eNode = new BNRoutePlanNode(llend.longitude, llend.latitude, "", null, CoordinateType.GCJ02);
只要将自己需要的坐标组装好,按部就班的就ok啦。

    这个也是自己闲的无聊瞎鼓捣的,不知道为什么百度地图并没有将这部分内容写在文档上,也许这个是有bug的,所以商业用途的朋友请多多测试。

    言语不当,还望包含;如有bug,还望指正;若要源码,请点击下载;谢谢。

   源码在这里:点击下载



    

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值