首页 > 解决方案 > 如何检查当前纬度/经度是否在给定纬度/经度的 20 公里范围内

问题描述

我有当前位置的纬度/经度和供应商位置的纬度/经度

我如何检查,如果我当前的位置纬度/经度在供应商位置纬度/经度的 20 公里范围内

jQuery(document).on('click', '.add_to_cart_button', function(event) {
    event.preventDefault();

    var cur_href = jQuery(this).attr("href");
    var cur_pro_id = cur_href.substring(cur_href.indexOf('=') +1);


    var params =  {"cur_pro_id":cur_pro_id,action:"get_vendor_latlng"}

    jQuery.post(customization.ajaxurl,params,function(data){
        var vendor_data =  JSON.parse(data);
        console.log(vendor_data);
        if ( vendor_data.pro_ven_lat !== '' && vendor_data.pro_ven_lng !== '' ) {
            navigator.geolocation.getCurrentPosition(
                function( position ) { 
                    var cur_lat = position.coords.latitude;
                    var cur_lng = position.coords.longitude;

                }
            );
        } else {

        }

    });

});

这里vendor_data.pro_ven_latvendor_data.pro_ven_lng变量保存供应商位置的纬度/经度

和变量保存当前位置cur_latcur_lng纬度/经度

标签: javascriptcoordinatesdistancelatitude-longitude

解决方案


您可以使用此函数来获取两者之间的公里距离:

function getDistanceInKM (lat1, lon1, lat2, lon2) {
  if(lat1 === lat2 && lon1 === lon2) return 0;
  const 
    radlat1 = Math.PI * lat1/180,
    radlat2 = Math.PI * lat2/180,
    theta = lon1 - lon2;
  const radtheta = Math.PI * theta/180;
  let dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
  if (dist > 1) dist = 1;
  dist = Math.acos(dist);
  dist = dist * 180/Math.PI;
  dist = dist * 60 * 1.1515;
  dist = dist * 1.609344;
  return dist;
}  

源代码来自这里


推荐阅读