【问题标题】:Geolocate issue - radius returned correctly, but no items returned地理定位问题 - 半径正确返回,但没有返回任何项目
【发布时间】:2014-08-14 19:55:37
【问题描述】:

我正在尝试在 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;
    }
}

【问题讨论】:

    标签: google-maps parsefloat


    【解决方案1】:

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

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

    在零大小的圆圈中不会有任何结果。将其从 intval 更改为 floatval 或将单位更改为米(

    【讨论】:

    • 这对我有用。我检查了几个生成相应映射的拆分函数,并用给定的 parseFloat 替换任何 parseInt 让它开始了!非常感谢你。你拯救了我的一天!
    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多