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;
}
}