1.背景
在项目中我们需要集成百度地图的时候,虽然不难,但一路走下来也未必一帆风顺,在这里我只记录集成的细节问题,详细请看官方文档,例子就举个道路查询的例子,更多例子,请查看百度地图官方demo或者本人的简单小demo.
2.开发准备
2.1在百度开发者平台上创建应用,获取appKey。这里需要一个SHA1值(开发版和发布版),
具体获取请参考:http://blog.csdn.net/donkor_/article/details/53487133。
2.2 下载百度api,注意最好不要下载最新版本,在这里我下载的是v3.5的稳定版,将jar拷贝到libs目录下,在main目录下创建jniLibs文件夹,将so文件对应copy,如图:
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();
}
}