在 PHP 中计算纬度/经度 GPS 点周围的半径
Posted
技术标签:
【中文标题】在 PHP 中计算纬度/经度 GPS 点周围的半径【英文标题】:Calculate the radius around a lat/lon GPS point in PHP 【发布时间】: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,然后做你想做的事情
正确。我找到了这段代码,我会试试看。更新的问题。
【参考方案1】:
所以,把它放在一个完整的答案中:
使用类似于@Gudz Daniel 链接的函数来计算到任何给定点的实际距离:https://www.geodatasource.com/developers/php。这会在该点周围绘制一个有效的“地理围栏”圆圈,因为您可以从任何入射角度测量您的距离。
function distance($lat1, $lon1, $lat2, $lon2, $unit)
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K")
return ($miles * 1.609344);
else
return $miles;
然后,您只需与您希望设备标记下一个进程的距离进行比较,正如@Mark B 指出的那样:
$distance = distance($lat1, $lon1, $lat2, $lon2, "M");
if ($distance <= 1)
// Now you know your truck/device is
// within 1 mile of the center-point.
send_alert("You've arrived!");
【讨论】:
以上是关于在 PHP 中计算纬度/经度 GPS 点周围的半径的主要内容,如果未能解决你的问题,请参考以下文章
给定 GPS 的地理位置,如何在给定的 x 米半径内找到纬度和经度
求助,GPS定位仪数据,求两点之间的距离,多少米?有经度、纬度数据。