android 百度地图 驾车路径的距离获取

本人也是新手,这篇就当是笔记。以后忘记了也方便查找。可能有错误的地方,希望大家指出。

这篇文章介绍的是百度地图中两个简单的功能,百度地图API文档写的不详细,按照自己的想法写的。

这是百度地图api的文档地址 http://developer.baidu.com/map/index.php?title=androidsdk  

如果是新手,首先申请开发者帐号,需要包名和数字签名。

包名就不解释了,数字签名就是SHA1



key4.png

然后把jar包复制到libs里。根据DEMO 写就没问题了。如果地图不出现,但是有网格出现,可能是KEY错了,或者是权限没加。

DEMO的包中,权限可能不完整。这边可能还要加上流量的权限,不然在没WIFI,有3G4G情况下,地图不显示。

   <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
    <!-- 这个权限用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

好了,该开始正题了。

首先开始说线路规划。主要讲驾车路线规划。百度文档上说的不是很清楚,我来贴详细代码。

因为兼职做的物流APP,需要两个点的驾车距离。我就只取了距离值。

有些地址的路径搜索不到,我根据经纬度,用自己的公式进行计算。这个方法输入起点名和终点名。

public void distance(String start,String end){
		//设置起终点信息,对于tranist search 来说,城市名无意义
		PlanNode stNode = PlanNode.withCityNameAndPlaceName("上海", start);
		PlanNode enNode = PlanNode.withCityNameAndPlaceName("上海", end);
		RoutemSearch.drivingSearch((new DrivingRoutePlanOption())
				.from(stNode)
				.to(enNode));

	}
然后在onGetDrivingRouteResult 这个方法里,可以获取到从百度地图API传回的参数。

我这边是转换了下类型。和截取了一下小数点。因为返回的参数是米。要除以1000。

if (result.error == SearchResult.ERRORNO.NO_ERROR) {  
			distance=  result.getRouteLines().get(0).getDistance();
			Double distance_1=	Double.valueOf(distance);
			Double distance_new=distance_1/1000;
			BigDecimal   b   =   new   BigDecimal(distance_new);  
			double   f1   =   b.setScale(1,   BigDecimal.ROUND_HALF_UP).doubleValue();
			distance_textview.setText(f1+"公里");
			distance1 = String.valueOf(f1);
		} 
result.getRouteLines().get(0)   0指的是获取的第一条建议路线,getDistance();意思就是距离,也可以调用其他信息。

然后我还判断了如果获取不到距离,用自己的公式,根据起点终点的经纬度来获取驾车的大概距离。

继续在onGetDrivingRouteResult 方法里进行判断如果百度地图没有数据

if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {  
//			Toast.makeText(MessageSendActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();  
			if (!geox1.equals("")&&!geoy1.equals("")&&!geox10.equals("")&&!geoy10.equals("")) {
				Double geox1double=Double.parseDouble(geoy1);
				Double geoy1double=Double.parseDouble(geox1);
				Double geox10double=Double.parseDouble(geoy10);
				Double geoy10double=Double.parseDouble(geox10);
				float distancefloat=getDistance(geox1double, geox10double, geoy1double, geoy10double);
				distance_textview.setText(distancefloat+"公里");
			}else {
				distance_textview.setText("无");
			}
		} 
getDistance 方法的公式是

private float getDistance(Double geox1,Double geox2,Double geoy1,Double geoy2){
		float distance = (float) 0.1;
		double radLat1 = rad(geox1);
		double radLat2 = rad(geox2);
		double a = radLat1 - radLat2;
		double b = rad(geoy1) - rad(geoy2);
		double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2)
				* Math.pow(Math.sin(b / 2), 2)));
		s = s * EARTH_RADIUS;
		s = (double) Math.round(s * 1000000) / 1000;// 单位为米
		s = s / 1000;// 单位为公里

		distance = ( (float)((int) (s * 13))) / 10;// 保留一位小数, 直线距离×1.3为行车路线距离
		if(distance <0.1){
			distance = (float) 0.1;
		}
		return distance;
	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值