PositionUtil.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package com.ydtech.modules.ser.utils;
  2. /**
  3. * 计算距离
  4. */
  5. public class PositionUtil {
  6. /**
  7. * 方法四:(高德地图计算方法)
  8. *
  9. * @param longitude1 第一点的经度
  10. * @param latitude1 第一点的纬度
  11. * @param longitude2 第二点的经度
  12. * @param latitude2 第二点的纬度
  13. * @return 返回的距离,单位m
  14. */
  15. public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) {
  16. if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) {
  17. return -1.0;
  18. }
  19. longitude1 *= 0.01745329251994329;
  20. latitude1 *= 0.01745329251994329;
  21. longitude2 *= 0.01745329251994329;
  22. latitude2 *= 0.01745329251994329;
  23. double var1 = Math.sin(longitude1);
  24. double var2 = Math.sin(latitude1);
  25. double var3 = Math.cos(longitude1);
  26. double var4 = Math.cos(latitude1);
  27. double var5 = Math.sin(longitude2);
  28. double var6 = Math.sin(latitude2);
  29. double var7 = Math.cos(longitude2);
  30. double var8 = Math.cos(latitude2);
  31. double[] var10 = new double[3];
  32. double[] var20 = new double[3];
  33. var10[0] = var4 * var3;
  34. var10[1] = var4 * var1;
  35. var10[2] = var2;
  36. var20[0] = var8 * var7;
  37. var20[1] = var8 * var5;
  38. var20[2] = var6;
  39. return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7;
  40. // 结果四舍五入 保留2位小数
  41. //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue();
  42. }
  43. }