1. /**
    2. * 检查用户是否在登记范围内(内部设置指定坐标) 坐标需传入同一坐标系
    3. * @param {Object} place 指定地点坐标
    4. * @param {Number} place.lng
    5. * @param {Number} place.lat
    6. * @param {Object} user 用户当前坐标
    7. * @param {Number} user.lng
    8. * @param {Number} user.lat
    9. * @param {Number} range 地点坐标XX米范围
    10. * @returns {Boolean}
    11. */
    12. export const checkDesLocation = params => {
    13. const place = params.place || { lng: 113.121987, lat: 23.016794 },
    14. user = params.user,
    15. range = params.range || 0;
    16. const radLat1 = place.lat * Math.PI / 180.0,
    17. radLat2 = user.lat * Math.PI / 180.0,
    18. a = radLat1 - radLat2,
    19. b = place.lng * Math.PI / 180.0 - user.lng * Math.PI / 180.0;
    20. let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
    21. s = s * 6378.137;
    22. s = Math.floor(Math.round(s * 10000) / 10);
    23. return s < range;
    24. };
    25. // 调用方法
    26. checkDesLocation({
    27. place: { lng: 113.331084, lat: 23.112223 },
    28. user: { lng: 113.331084, lat: 23.112223 },
    29. range: 500
    30. }); // true
    31. checkDesLocation({
    32. place: { lng: 113.331084, lat: 23.112223 },
    33. user: { lng: 113.333566, lat: 23.125733 },
    34. range: 500
    35. }); // false