私は非常によく似た質問の解決策に取り組んでいましたが、実装時に、正方形ではなく返された座標を持つ背の高い長方形を生成していることを発見しました (他の質問に対するマティアスの回答を参照してください)。
これは、独自の優先クエリメソッドを持つ WordPress で動作するため、返される配列のみが必要でした。
これが私の実装です:
function bar_get_nearby( $lat, $lng, $limit = 50, $distance = 50, $unit = 'mi' ) {
// radius of earth; @note: the earth is not perfectly spherical, but this is considered the 'mean radius'
if( $unit == 'km' ) { $radius = 6371.009; }
elseif ( $unit == 'mi' ) { $radius = 3958.761; }
// latitude boundaries
$maxLat = ( float ) $lat + rad2deg( $distance / $radius );
$minLat = ( float ) $lat - rad2deg( $distance / $radius );
// longitude boundaries (longitude gets smaller when latitude increases)
$maxLng = ( float ) $lng + rad2deg( $distance / $radius / cos( deg2rad( ( float ) $lat ) ) );
$minLng = ( float ) $lng - rad2deg( $distance / $radius / cos( deg2rad( ( float ) $lat ) ) );
$max_min_values = array(
'max_latitude' => $maxLat,
'min_latitude' => $minLat,
'max_longitude' => $maxLng,
'min_longitude' => $minLng
);
return $max_min_values;
}
希望する郵便番号 G2 1QX と 5 マイルの距離を (Google Maps API 経由で) ジオコーディングすると、次の配列を返す関数で緯度/経度 -4.2556347/55.8620472 が得られます。
Array
(
[max_latitude] => -4.18326890233
[min_latitude] => -4.32800049767
[max_longitude] => 55.9346130696
[min_longitude] => 55.7894813304
)
何か案は?よろしくお願いします。
乾杯、RS