建材商城系统20241014
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.1 KiB

11 months ago
  1. import config from '../config.js'
  2. /**
  3. * 计算两点之间的距离
  4. * @param {number} lat1 地点1精度
  5. * @param {number} lon1 地点1维度
  6. * @param {number} lat2 地点2精度
  7. * @param {number} lon2 地点2维度
  8. * @param {number} fixed 保留几位小数,默认0,单位km
  9. */
  10. function calculateDistance(lat1, lon1, lat2, lon2, fixed = 0) { //计算两点距离
  11. let distance = 0
  12. if (!lat2 || !lon2) return distance
  13. //先强制转换一下(后端给的字符串)
  14. lat1 = parseFloat(lat1)
  15. lon1 = parseFloat(lon1)
  16. lat2 = parseFloat(lat2)
  17. lon2 = parseFloat(lon2)
  18. // 将角度转换为弧度
  19. const R = 6371; // 地球半径,单位公里
  20. const dLat = (lat2 - lat1) * Math.PI / 180;
  21. const dLon = (lon2 - lon1) * Math.PI / 180;
  22. lat1 = lat1 * Math.PI / 180;
  23. lat2 = lat2 * Math.PI / 180;
  24. // Haversine公式
  25. const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
  26. Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
  27. const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  28. // 计算距离
  29. distance = R * c;
  30. return distance.toFixed(fixed)
  31. }
  32. export default {
  33. calculateDistance, //计算两点距离
  34. }