【发布时间】:2015-11-13 15:52:58
【问题描述】:
我正在尝试制作一个 PHP 脚本,该脚本可以在 GPS 设备(跟踪器)进入具有预定义位置的“地理围栏”时执行某些操作。我发现的大多数帮助都使用了半正弦公式,但大多数帮助都试图从一个点获取最近的位置。我几乎需要相反的。
设备和“围栏位置”坐标位于 MySQL 数据库中,我能够成功提取它们。现在我需要设置围栏位置中心周围的半径,从该点开始在任何方向上都应该是 10 米。
每当设备进入这 10m 半径内时,PHP 都会做一些事情。
所以 A(lat,lon) 点周围有 10m 的半径,设备 B 将其 lat,lon 发送到 SQL 数据库中,只要 A 点和 B 点彼此在 10m 范围内,就会发生一些事情。
我从哪里开始?在我的情况下,haversine 有用吗?
我认为 PHP 可以计算 A 和 B 的距离差,只要该距离低于 10m,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 的最新位置。我已经完成了所有这些工作。跨度>
-
所以当 php 更新数据库时,它会选择计算 A&B 之间的距离,例如
if (dist($A, $B) < 10) { do_something(); } -
所以你有一个中心坐标和设备坐标,使用this func计算距离并检查它是否小于10,然后做你想做的事情
-
正确。我找到了这段代码,我会试试看。更新的问题。
标签: php mysql gps coordinates haversine