-1

我正在尝试在 wordpress 安装中获得地理定位功能。基本上发生的情况是,在网站访问者给定位置的半径 x 内的任何项目都将返回到谷歌地图上。这可以正常工作,但前提是半径等于或大于 1 公里。只要给定半径小于 1 公里,半径本身就会正确显示,但不会显示该半径内的数据库项目。最初我也有显示正确半径小于 1 公里的问题,但我通过使用 parseFloat 而不是 parseInt 解决了这个问题。不幸的是,在这方面我的技能远非完美,我可能需要在这里有能力的人的帮助。如果您有想法,请告诉我。此处包含两个涉及的脚本。

   if(geoloc){
            if(ajaxGeo){
                var inputRadius = geoInputRadius.val();
                if(!isNaN(inputRadius)){
                    var radiusInM = parseFloat(geoInputRadius.val()) * 1000;
                } else {
                    var radiusInM = parseInt(geoInputRadius.data('default-value')) * 1000;
                }
                // autofit by circle
                mapObj.circle = {
                    options: {
                        center: geoloc,
                        radius : radiusInM,
                        visible : {ifset $themeOptions->search->showAdvancedSearchRadius}true{else}false{/ifset},
                        fillOpacity : 0.15,
                        fillColor : "#2c82be",
                        strokeColor : "#2c82be"
                    }
                }
            } else {
                var radiusInM = parseInt({ifset $geolocationRadius}{$geolocationRadius}{else}100{/ifset}) * 1000;
                // autofit by circle
                mapObj.circle = {
                    options: {
                        center: geoloc,
                        radius : radiusInM,
                        visible : {ifset $geolocationCircle}true{else}false{/ifset},
                        fillOpacity : 0.15,
                        fillColor : "#2c82be",
                        strokeColor : "#2c82be"
                    }
                }
            }
        }

function isPointInRadius($radiusInKm, $cenLat, $cenLng, $lat, $lng) {
    $radiusInKm = intval($radiusInKm);
    $cenLat = floatval($cenLat);
    $cenLng = floatval($cenLng);
    $lat = floatval($lat);
    $lng = floatval($lng);
    $distance = ( 6371 * acos( cos( deg2rad($cenLat) ) * cos( deg2rad( $lat ) ) * cos( deg2rad( $lng ) - deg2rad($cenLng) ) + sin( deg2rad($cenLat) ) * sin( deg2rad( $lat ) ) ) );
    if($distance <= $radiusInKm){
        return true;
    } else {
        return false;
    }
}
4

1 回答 1

1

如果半径小于 1,则变为 0,这将返回大小为零的圆的结果:

function isPointInRadius($radiusInKm, $cenLat, $cenLng, $lat, $lng) {
  $radiusInKm = intval($radiusInKm);

零大小的圆圈不会有任何结果。将其从 intval 更改为 floatval 或将单位更改为米(< 1 米可能仍会返回零结果,但这是意料之中的)。

于 2014-08-14T20:18:24.577 回答