如何计算经纬度之间的差异?

3

我需要计算当前位置和上一个位置的经纬度差异,但它以指数格式显示结果,我需要以米为单位显示。我不明白如何将其转换为米制格式。需要什么公式?

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();
}
3个回答

2
我发现在JavaScript中有这个链接,我认为它可以帮助你理解如何实现它。

谢谢!我们可以在Java中使用JavaScript吗? - Sandip Armal Patil
1
我不知道,很抱歉,但我认为你不能这样做。 - Pben
有没有Java方法?谢谢。 - Sandip Armal Patil

1
在这个 问题 上,我找到了这段代码:

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


1
@sandiparmal 看起来很奇怪,你的 distanceCalculate() 公式和 Julien 发布的 distFrom() 实际上都使用了相同的 Haversine 公式;只是在你的 distanceCalculate() 中,它被转换为英里到米。从你的问题描述来看,似乎你有一个在格式化指数输出方面的问题,而这个输出已经是以米为单位的。如果你想要显示没有指数项的输出,请查看这个链接:https://dev59.com/X0rSa4cB1Zd3GeqPXpdY - ecle
地球不是一个完美的球体,而您的答案假定它是。 - Steve Kuo

1

这是一个简单的问题--目前您正在使用地球半径的英里数; 只需将其更改为米制单位(来自维基百科:6,371,000),然后删除您的转换即可


谢谢!我会仔细阅读它! - Sandip Armal Patil
有没有相应的Java方法? - Sandip Armal Patil
@sandiparmal 一个Java方法是用来做什么的? - Rowland Shaw
Java用于计算纬度和经度差异的方法 - Sandip Armal Patil
@sandiparmal 好的,你已经有了方法,只需要使用适合你需求的正确半径即可。 - Rowland Shaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接