百度地图的集成过程

来源:互联网 发布:真盖塔 知乎 编辑:程序博客网 时间:2024/06/05 19:25

1.背景

在项目中我们需要集成百度地图的时候,虽然不难,但一路走下来也未必一帆风顺,在这里我只记录集成的细节问题,详细请看官方文档,例子就举个道路查询的例子,更多例子,请查看百度地图官方demo或者本人的简单小demo.

2.开发准备

2.1在百度开发者平台上创建应用,获取appKey。这里需要一个SHA1值(开发版和发布版),
具体获取请参考:http://blog.csdn.net/donkor_/article/details/53487133。

获取百度地图的key

2.2 下载百度api,注意最好不要下载最新版本,在这里我下载的是v3.5的稳定版,将jar拷贝到libs目录下,在main目录下创建jniLibs文件夹,将so文件对应copy,如图:

集成jar和so文件

3.开发之路

demo地址:
3.1 添加需要的权限,并在在AndroidManifest的application节点下添加如下:

   <meta-data            android:name="com.baidu.lbsapi.API_KEY"            android:value="appKey的位置" />

3.2 将校验appKey的代码,至少放在地图页面的呃前一个页面,注意:context须是getApplicationContext()

SDKInitializer.initialize(getApplicationContext());

3.3 百度地图的地图控件是MapView,只要运用这个控件,就可以展示地图了

 <com.baidu.mapapi.map.MapView        android:id="@+id/mapview"        android:layout_width="match_parent"        android:layout_height="match_parent" />

3.4 接下来简单说下驾车路线查询,其他的类似
3.4.1 通过mMapView拿到mBaiduMap,mBaiduMap是地图的操作类,是关键api,

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.driving);        ButterKnife.bind(this);        mBaiduMap= mMapView.getMap();        mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(new LatLng(39.106391, 116.3743)));    }

3.4.2 通过routePlanSearch进行驾车搜索,利用drivingRoutePlanOption设置起始点及途经点,搜索结果在routePlanSearch.setOnGetRoutePlanResultListener()监听中获取并展示

        RoutePlanSearch routePlanSearch = RoutePlanSearch.newInstance();        //设置搜索结果的监听        routePlanSearch.setOnGetRoutePlanResultListener(new OnDrivingListener());        // 驾车搜索        DrivingRoutePlanOption option = new DrivingRoutePlanOption();        option.policy(DrivingRoutePlanOption.DrivingPolicy.ECAR_FEE_FIRST);        //设置起点        PlanNode _from= PlanNode.withLocation(latLng);        option.from(_from);        //设置终点        PlanNode _to = PlanNode.withCityNameAndPlaceName("北京","故宫");        option.to(_to);        //设置途经点        List<PlanNode> list = new ArrayList<>();        list.add(PlanNode.withLocation(new LatLng(39.917661,116.215064)));        option.passBy(list);        routePlanSearch.drivingSearch(option);

3.4.3 在搜索结果的回调中处理

 class OnDrivingListener implements OnGetRoutePlanResultListener {        @Override        public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {        }        @Override        public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {        }        @Override        public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {            if(drivingRouteResult==null||drivingRouteResult.error.equals(SearchResult.ERRORNO.RESULT_NOT_FOUND)){                Toast.makeText(DrivingSearchDemo.this, "没有数据", Toast.LENGTH_SHORT).show();                return;            }            DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(baiduMap);            // 给覆盖物传递事件            baiduMap.setOnMarkerClickListener(drivingRouteOverlay);            drivingRouteOverlay.setData(drivingRouteResult.getRouteLines().get(0));            drivingRouteOverlay.addToMap();            drivingRouteOverlay.zoomToSpan();        }    }
原创粉丝点击