Фильтруйте сообщения WordPress, используя ограничивающий прямоугольник в конце и в конце

Относительно ответа, данного 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
)

)

)

Спасибо заранее..

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]