在java中,如何计算多个纬度和经度之间的距离?

在java中,如何计算多个纬度和经度之间的距离?,java,Java,我正在创建一个项目,使用googledirectionapi计算多个纬度和经度之间的距离。但这是不正确的。我想使用Java计算多个纬度和经度之间的距离 这是我的java代码 private static double distance(double lat1, double lon1, double lat2, double lon2, char unit) { double theta = lon1 - lon2; double dist = Math.sin(deg2rad(lat1

我正在创建一个项目,使用
googledirectionapi
计算多个纬度和经度之间的距离。但这是不正确的。我想使用
Java
计算多个纬度和经度之间的距离

这是我的java代码

private static double distance(double lat1, double lon1, double lat2, double lon2, char unit) {
  double theta = lon1 - lon2;
  double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
  dist = Math.acos(dist);
  dist = rad2deg(dist);
  dist = dist * 60 * 1.1515;
  if (unit == 'K') {
    dist = dist * 1.609344;
  } else if (unit == 'N') {
    dist = dist * 0.8684;
    }
  return (dist);
}

private static double deg2rad(double deg) {
  return (deg * Math.PI / 180.0);
}

private static double rad2deg(double rad) {
  return (rad * 180 / Math.PI);
}

要计算两点之间的距离,需要使用

在java中:

public class Haversine {

    public static final double R = 6372.8; // In kilometers

    // calculate distance with haversine formula
    public static double haversine(double lat1, double lon1, double lat2, double lon2) {
        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lon2 - lon1);
        lat1 = Math.toRadians(lat1);
        lat2 = Math.toRadians(lat2);

        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
        double c = 2 * Math.asin(Math.sqrt(a));
        return R * c;
    }

    // example how to use
    public static void main(String[] args) {
        System.out.println(haversine(36.12, -86.67, 33.94, -118.40));
    }
}
请尝试以下代码:

private static double distance(double lat1, double lon1, double lat2, double lon2, char unit) {
  double theta = lon1 - lon2;
  double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
  dist = Math.acos(dist);
  dist = rad2deg(dist);
  dist = dist * 60 * 1.1515;
  if (unit == 'K') {
    dist = dist * 1.609344;
  } else if (unit == 'N') {
    dist = dist * 0.8684;
    }
  return (dist);
}

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*::  This function converts decimal degrees to radians             :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private static double deg2rad(double deg) {
  return (deg * Math.PI / 180.0);
}

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*::  This function converts radians to decimal degrees             :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private static double rad2deg(double rad) {
  return (rad * 180 / Math.PI);
}

这并不准确,而且是荷兰语,但我认为这并不难理解:

包nl.abz.testjaap

public class Locatie {
  private static final double DOORSNEDE_AARDE = 40000.0;
  public final double latitude;
  public final double longitude;

  public Locatie(double latitude, double longitude) throws IllegalArgumentException {
  if (latitude > 90 || latitude < -90) {
      throw new IllegalArgumentException("latitude moet tussen - 90 en 90 liggen, was "
              + latitude);
  }
  if (longitude < -360 || longitude > 360) {
      throw new IllegalArgumentException("Longitude moet tussen -360 en 360 liggen was "
              + longitude);
  }
  this.latitude = latitude;
  this.longitude = longitude;
}


}

Java还是JavaScript?如果使用Java,程序员交换可能会有所帮助more@WilliamIsted在java中,我想知道。你能正确计算两点之间的距离吗?如果是,“多个”是否意味着“在成对的点上迭代”?如果第一个答案是“不”,我不知道你怎么做第二个。我使用的代码相同,但没有得到确切的距离,相同的lat lng如果我传递到谷歌地图,它显示不正确。然后显示你的代码,看看发生了什么事
/**
 * Calculate the distance in KM
 * 
 * @param l2
 * @return
 */
public double afstandTot(Locatie l2) {
  double lon1 = longitude / 180 * Math.PI;
  double lon2 = l2.longitude / 180 * Math.PI;
  double lat1 = latitude / 180 * Math.PI;
  double lat2 = l2.latitude / 180 * Math.PI;
  double x1 = Math.cos(lon1) * Math.cos(lat1);
  double y1 = Math.sin(lon1) * Math.cos(lat1);
  double z1 = Math.sin(lat1);

  double x2 = Math.cos(lon2) * Math.cos(lat2);
  double y2 = Math.sin(lon2) * Math.cos(lat2);
  double z2 = Math.sin(lat2);

  double psi = Math.acos(x1 * x2 + y1 * y2 + z1 * z2);
  double afstand = DOORSNEDE_AARDE / (2 * Math.PI) * psi;
  return afstand;