-1

wordpress インストール内で geolocate 関数を動作させようとしています。基本的に何が起こるかというと、サイト訪問者の指定された場所から半径 x 以内のアイテムが Google マップに返されます。これは問題なく動作しますが、半径が 1 km 以上の場合のみです。特定の半径が 1 km 未満の場合、半径自体は正しく表示されますが、この半径内のデータベース アイテムは表示されません。最初は、1 km 未満の正しい半径を表示する際にも問題がありましたが、parseInt の代わりに parseFloat を使用して解決しました。残念ながら、これに関しては私のスキルは完璧にはほど遠いので、ここで有能な誰かの助けが必要になるかもしれません. アイデアがあれば教えてください。関連する 2 つのスクリプトがここに含まれています。

   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 になり、これはサイズ 0 の円の結果を返します。

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

サイズがゼロの円には結果はありません。intval から floatval に変更するか、単位をメートルに変更します (< 1 メートルの場合、おそらくゼロの結果が返されますが、これは予想されることです)。

于 2014-08-14T20:18:24.577 に答える