版权声明:本博客为博主原创,欢迎大佬批评指点! https://blog.csdn.net/qq_31332467/article/details/79222165
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的计算方式:
扫描二维码关注公众号,回复:
4458102 查看本文章
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;
}