Относительно ответа, данного Enigma здесь https://stackoverflow.com/a/29753454/4804502
Это почти идеально для того, что мне нужно достичь, так как с помощью WP_Query я могу добавить дополнительные метаданные для фильтрации возвращаемых постов, но у меня возникла проблема с возвратом координат для ограничительной рамки.
Поэтому необходимо отфильтровать поиск других сообщений в радиусе 2 км.
Используя функции enigma, я создаю ограничивающий прямоугольник для ввода двух разных мета-запросов.
Но, хотя долгота возвращена правильно, немного выше, чем первоначальная долгота, широта возвращается не близко и не может за всю жизнь понять, почему.
Это оригинальная широта и долгота ..
13.736979
-100.55612300000007
Это возвращается из ограничительной рамки.
Array
(
[0] => 1.17060885652
[1] => 1.17060791476
[2] => 100.556121791
[3] => 100.556124209
)
Я предполагаю, что это следующая функция,
function get_destination_lat($lat1, $lng1, $d, $brng){
return asin( sin($lat1)*cos($d/$R) +
cos($lat1)*sin($d/$R)*cos($brng) );
}
и также предполагая, что между return и asin должен быть $ lat +, по крайней мере это дает ему где-то более близкую широту, но не меньше или больше чем.
Может действительно сделать с небольшой помощью от кого-то, кто может рассмотреть следующее и дать совет по решению.
PS .. это три функции в вопросе ..
function get_destination_lat($lat1, $lng1, $d, $brng){
return asin( sin($lat1)*cos($d/$R) +
cos($lat1)*sin($d/$R)*cos($brng) );
}
function get_destination_lng($lat1, $lng1, $d, $brng){
$lat2 = get_destination_lat($lat1, $lng1, $d, $brng);
return $lng1 + atan2(sin($brng)*sin($d/$R)*cos($lat1),
cos($d/$R)-sin($lat1)*sin($lat2));
}
function get_bounding_box($lat, $lng, $range){
// latlng in radians, range in m
$latmin = get_destination_lat($lat, $lng, $range, 0);
$latmax = get_destination_lat($lat, $lng, $range, deg2rad(180));
$lngmax = get_destination_lng($lat, $lng, $range, deg2rad(90));
$lngmin = get_destination_lng($lat, $lng, $range, deg2rad(270));
// return approx bounding latlng in radians
return array($latmin, $latmax, $lngmin, $lngmax);
}
Кроме того, это вывод массива $ args:
[query] => Array
(
[posts_per_page] => 24
[category] =>
[orderby] => post_date
[order] => DESC
[post_type] => dt_agents
[post_status] => publish
[meta_query] => Array
(
[relation] => AND
[0] => Array
(
[key] => _building_latitude
[value] => Array
(
[0] => 1.17060885652
[1] => 1.17060791476
)
[type] => numeric
[compare] => BETWEEN
)
[1] => Array
(
[key] => _building_longitude
[value] => Array
(
[0] => 100.556121791
[1] => 100.556124209
)
[type] => numeric
[compare] => BETWEEN
)
)
)
Спасибо заранее..
Задача ещё не решена.
Других решений пока нет …