检查纬度和经度是否在 PHP 中的圆圈内
Check if a latitude and longitude is within a circle in PHP
原题Check if a latitude and longitude is within a circle
我想知道如何使用 PHP 实现这一点。我有一个纬度和经度数组,想针对另一个 latitudes/longitudes 数组测试它们,以给出 true/false 场景
我已经为您准备了示例代码片段。它对我来说很好用。随意适应您自己的逻辑。
$lat1 = "10.5900627";
$lon1 = "77.1933317";
$lat2 = "10.6068507";
$lon2 = "77.117246";
function distance($lat1, $lon1, $lat2, $lon2, $unit)
{
if (($lat1 == $lat2) && ($lon1 == $lon2)) {
return 0;
}
else {
$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 if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
}
if(distance($lat1, $lon1, $lat2, $lon2, "K") < 10)
{
echo "True";
}
else
{
echo "False";
}
如果 'K' 的结果小于 10Km,则结果为“True”。否则 'False' 将 return 作为结果。
我会这样做,首先我需要计算两点之间的距离(这是接近 Google 地图之一的方法:):
function computeDistance($lat1, $lng1, $lat2, $lng2, $radius)
{
static $x = M_PI / 180;
$lat1 *= $x; $lng1 *= $x;
$lat2 *= $x; $lng2 *= $x;
$distance = 2 * asin(sqrt(pow(sin(($lat1 - $lat2) / 2), 2) + cos($lat1) * cos($lat2) * pow(sin(($lng1 - $lng2) / 2), 2)));
return $distance * $radius;
}
然后我需要一个简单的函数,当距离低于 10 公里($KM)时,基点(中心)为 return true :
function isWithinCircle($lat, $lng, $KM = 10): bool
{
$baseLat = 0;
$baseLng = 0;
$radius = 6378137;
return computeDistance($baseLat, $baseLng, $lat, $lng, $radius) <= $KM;
}
原题Check if a latitude and longitude is within a circle
我想知道如何使用 PHP 实现这一点。我有一个纬度和经度数组,想针对另一个 latitudes/longitudes 数组测试它们,以给出 true/false 场景
我已经为您准备了示例代码片段。它对我来说很好用。随意适应您自己的逻辑。
$lat1 = "10.5900627";
$lon1 = "77.1933317";
$lat2 = "10.6068507";
$lon2 = "77.117246";
function distance($lat1, $lon1, $lat2, $lon2, $unit)
{
if (($lat1 == $lat2) && ($lon1 == $lon2)) {
return 0;
}
else {
$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 if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
}
if(distance($lat1, $lon1, $lat2, $lon2, "K") < 10)
{
echo "True";
}
else
{
echo "False";
}
如果 'K' 的结果小于 10Km,则结果为“True”。否则 'False' 将 return 作为结果。
我会这样做,首先我需要计算两点之间的距离(这是接近 Google 地图之一的方法:):
function computeDistance($lat1, $lng1, $lat2, $lng2, $radius)
{
static $x = M_PI / 180;
$lat1 *= $x; $lng1 *= $x;
$lat2 *= $x; $lng2 *= $x;
$distance = 2 * asin(sqrt(pow(sin(($lat1 - $lat2) / 2), 2) + cos($lat1) * cos($lat2) * pow(sin(($lng1 - $lng2) / 2), 2)));
return $distance * $radius;
}
然后我需要一个简单的函数,当距离低于 10 公里($KM)时,基点(中心)为 return true :
function isWithinCircle($lat, $lng, $KM = 10): bool
{
$baseLat = 0;
$baseLng = 0;
$radius = 6378137;
return computeDistance($baseLat, $baseLng, $lat, $lng, $radius) <= $KM;
}