Android使用百度地图进行定位和路径规划(小白必看,踩坑之作)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ever69/article/details/82715589

项目中集成的百度地图需要使用到路径规划这个功能,并且可以跳转第三方地图软件进行导航。调用第三方地图进行导航另一篇文章有写,这篇文章主要记录一下使用路径规划中遇到的坑。

前言

百度路径规划开发文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/route/drive

要使用百度地图路径规划前,先确保下载百度地图SDK时勾选了检索功能模块和定位模块,不然路径规划功所用到的一些类会找不到。

先讲一下项目中路径规划的逻辑,因为路径规划需要起点和终点的地理坐标,终点的坐标由后端提供,我这里只需要调用定位,确定当前所处地理位置坐标为起点就好。

实战

按照惯例先看官方文档

尼玛。。。佛系文档,看不看的懂随缘。

结合文档和百度,一点点写下来发现不对劲,为什么DrivingRouteOverlay这个类找不到,我下载SDK的时候明明已经勾选完需要的模块了,于是我从新下载了一遍SDK,替换掉项目中的,结果依然是没有。得了,作为一个伪资深程序员,直觉告诉我——有事没事找DEMO。果不其然,这个类就在DEMO里,你把老子好一顿找啊。把要用到的几个类考到自己项目中,就可以正常使用了。

现在跟着官方文档的步骤再一步步开发

1、创建驾车线路规划检索实例;

 //初始化路径规划
 mPlanSearch = RoutePlanSearch.newInstance();

2、创建驾车线路规划检索监听者;

我的项目中只需用到驾车路径规划,如果需要其他路径规划的,记得把所需要的类先从官方demo中拷贝过来,再分别实现方法就好了

/**
     * 路径规划结果返回接口
     */
    private OnGetRoutePlanResultListener mPlanResultListener = new OnGetRoutePlanResultListener() {
        //步行路线
        @Override
        public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {

        }

        //公交路线
        @Override
        public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {

        }

        //轨道交通路线
        @Override
        public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {

        }

        //驾车路线
        @Override
        public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
            if (drivingRouteResult == null || drivingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
                T.show(mContext, "抱歉,未找到结果");
            }
            if (drivingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
                // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
                // result.getSuggestAddrInfo()
                return;
            }
            if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
                if (drivingRouteResult.getRouteLines().size() >= 1) {
                    DrivingRouteOverlay overlay = new DrivingRouteOverlay(mBaiduMap);
//                mBaiduMap.setOnMarkerClickListener(overlay);
                    overlay.setData(drivingRouteResult.getRouteLines().get(0));//设置路线数据
                    overlay.addToMap();//将所有overlay添加到地图中
                    overlay.zoomToSpan();//缩放地图
                } else {
                    T.show(mContext, "暂无路径规划");
                }
            }
        }

        //室内路线
        @Override
        public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {

        }

        //骑行路线
        @Override
        public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {

        }
    };

3、设置驾车线路规划检索监听者;

mPlanSearch.setOnGetRoutePlanResultListener(mPlanResultListener);

4、准备检索起、终点信息;

5、发起驾车线路规划检索;

//定位当前位置后在进行路径规划
        mPlanSearchLocationClient = LocalAddrUtil.getLocalAddr(app, new BDLocationListener() {
            @Override
            public void onReceiveLocation(BDLocation bdLocation) {
                dismissLoading();
                mPlanSearchLocationClient.stop();
                mStartLat = bdLocation.getLatitude();
                mstartLng = bdLocation.getLongitude();
                PlanNode starNode = PlanNode.withLocation(new LatLng(mStartLat, mstartLng));
                PlanNode endNode = PlanNode.withLocation(new LatLng(mLat, mLng));
                //开启路径规划检索
                mPlanSearch.drivingSearch(new DrivingRoutePlanOption().from(starNode).to(endNode));
            }
        });

6、释放检索实例;

mPlanSearch.destroy();

到此集成完毕,本以为可以开开心心的使用路径规划,结果运行报错,mmp,一看log发现是资源报错,发现是拷贝过来的类有问题,检查一番,错出在这里

BitmapDescriptorFactor
                                                      .fromAssetWithDpi("Icon_line_node.png")

因为路径规划需要用到一些资源图片,比如起终点的小图标。

解决办法,1、从官方DEMO中把那些资源拷贝过来。2、替换为自己项目中的资源。

总结

集成百度地图的过程中我发现,百度不仅给用户挖坑,开发也不放过啊!

猜你喜欢

转载自blog.csdn.net/Ever69/article/details/82715589
今日推荐