计算Google地图二个坐标点的距离

1.

我们在使用地图的时候,国内有些地图在计算2个坐标的距离的时候都有对应的API 可以用,比如Amap的就有:

AMapUtils.calculateLineDistance(currentLatlng, curLatlng);
这样我们就可以取到结果!

2.

但是我们在集成了google服务后,使用google地图,去查看google API 却无此方法。集成google服务,引用jar

   compile 'com.google.android.gms:play-services-location:8.4.0'
    compile 'com.google.android.gms:play-services-maps:8.4.0'
至此,通过经纬度,在通过球面距离公式:

 其中,theta是两向量夹角,球面距离d:

可以得到C的计算方式:

int Distance(float lat1, float lon1, float lat2, float lon2)  
{  
    double latitude1,longitude1,latitude2,longitude2;  
    double dlat,dlon;  
    latitude1=lat1;  
    longitude1=lon1;  
    latitude2=lat2;  
    longitude2=lon2;  
    //computing procedure  
    double a,c,distance;  
    dlon =fabs((longitude2 - longitude1))*pi/180;  
    dlat =fabs((latitude2 - latitude1))*pi/180;  
    a = (sin(dlat/2)*sin(dlat/2)) + cos(latitude1*pi/180) * cos(latitude2*pi/180) * (sin(dlon/2)*sin(dlon/2));  
    if(a==1.0)  
        c=pi;  
    else  
        c = 2 * atan(sqrt(a)/sqrt(1-a));  
    distance= radio*c;  
  
    return distance;  
} 

转换为java:

   /**
     * <p>获取Google 地图上,2点之间的距离</p>
     *
     * @param start
     * @param end
     * @return
     */
    public double getGoogleDistance(LatLng start, LatLng end) {
        double lat1 = (Math.PI / 180) * start.latitude;
        double lat2 = (Math.PI / 180) * end.latitude;
        double lon1 = (Math.PI / 180) * start.longitude;
        double lon2 = (Math.PI / 180) * end.longitude;

        double R = 6371;//地球半径
        double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2)
                * Math.cos(lon2 - lon1))
                * R;
        return d * 1000;
    }





  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值