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,还望指正;若要源码,请点击下载;谢谢。
源码在这里:点击下载。