我需要计算当前位置的经度和纬度之间的差异 和以前的位置。但它以指数格式显示结果,我需要它 米。我不明白如何以米格式转换它。 哪个公式要求?
double distance2 = distanceCalculate(lat,lng,locationB.getLatitude(),locationB.getLongitude());
Toast.makeText(this, "distance2=="+Double.valueOf(distance2).longValue() + "meter" , Toast.LENGTH_SHORT).show();
double ActualDistance=(Double.valueOf(distance2).longValue())/1E6;
if(ActualDistance<400)
{
System.out.println("identical");
Toast.makeText(this,"identical", Toast.LENGTH_LONG).show();
}
else
{
// send sms
SmsManager sms = SmsManager.getDefault();
}
public static float distanceCalculate (double lat1, double lng1, double lat2, double lng2 )
{
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
int meterConversion = 1609;
return new Float(dist * meterConversion).floatValue();
}
答案 0 :(得分:2)
我在JavaScript中找到this我认为它可以帮助您了解如何做到这一点
答案 1 :(得分:1)
这是一个简单的 - 目前你正在以英里为单位使用地球的半径;只需以米为单位更改半径(per Wikipedia:6,371,000),然后移除转化
答案 2 :(得分:1)
在这个question上,我找到了这段代码:
public static double distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist;
}
这是Haversine公式的java实现。
它将以英里为单位返回距离。对于其他单位,使用http://en.wikipedia.org/wiki/Earth_radius
更改earthRadius