Я пытаюсь создать скрипт PHP, который может что-то сделать, когда устройство GPS (трекер) входит в «геозонность» с предопределенной позицией. Большая часть помощи, которую я нашел, использует формулу haversine, но большинство из них пытается получить ближайшее место от точки. Мне в значительной степени нужно обратное.
Координаты устройства и координаты «забора» находятся в базе данных MySQL, и я могу добиться их успеха. Теперь мне нужно установить радиус вокруг центра расположения забора, который должен быть 10 метров в любом направлении от этой точки.
Всякий раз, когда устройство входит в этот радиус 10 м, PHP что-то делает.
Итак, точка A (lat, lon) имеет радиус 10 м вокруг нее, устройство B отправляет свой lat, lon в базу данных SQL и, когда точки A и B находятся в пределах 10 м друг от друга, что-то происходит. С чего начать? Является ли haversine каким-либо использованием в моей ситуации? Я думаю, что PHP может искажать разницу расстояний A и B, когда это расстояние меньше 10 м, PHP что-то делает.Вычислить радиус вокруг точки GPS lat/lon в PHP
Я думаю, что это могло бы сделать эту работу.
function haversineGreatCircleDistance(
$latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
{
// convert from degrees to radians
$latFrom = deg2rad($latitudeFrom);
$lonFrom = deg2rad($longitudeFrom);
$latTo = deg2rad($latitudeTo);
$lonTo = deg2rad($longitudeTo);
$latDelta = $latTo - $latFrom;
$lonDelta = $lonTo - $lonFrom;
$angle = 2 * asin(sqrt(pow(sin($latDelta/2), 2) +
cos($latFrom) * cos($latTo) * pow(sin($lonDelta/2), 2)));
return $angle * $earthRadius;
}
PHP работает на сервере. как именно он узнает, где это устройство gps, и что он делает? –
Координаты A и B хранятся в базе данных SQL. A всегда является одним и тем же координатором (он не перемещается), B перемещает и обновляет свое местоположение в базе данных каждые X секунд, поэтому самая новая запись в базе данных - это последняя позиция B. У меня уже есть все это. – Fid
поэтому, когда php обновляет db, он выбирает для вычисления расстояния между A & B, например. 'if (dist ($ A, $ B) <10) {do_something(); } ' –