如何仅使用PHP检查某个坐标是否落在另一个坐标半径

2022-08-30 16:56:43

我见过很多函数,但它恰好只适用于MySQL或Postgresql。我想要PHP的等效逻辑。我正在做一些比较,比如我有这个数据,这些数据是在创建时产生的。

Lat: 56.130366
Long: -106.34677099999

稍后,我想检查此坐标是否落在另一个坐标的半径范围内。

Lat: 57.223366
Long: -106.34675644699
radius: 100000 ( meters )

提前致谢!


答案 1

感谢您的帮助。下面是一个示例函数,它采用两组经度和纬度坐标并返回两者之间的距离。

function getDistance($latitude1, $longitude1, $latitude2, $longitude2) {  
  $earth_radius = 6371;

  $dLat = deg2rad($latitude2 - $latitude1);  
  $dLon = deg2rad($longitude2 - $longitude1);  

  $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * sin($dLon/2) * sin($dLon/2);  
  $c = 2 * asin(sqrt($a));  
  $d = $earth_radius * $c;  

  return $d;  
}

$distance = getDistance(56.130366, -106.34677099999, 57.223366, -106.34675644699);
if ($distance < 100) {
  echo "Within 100 kilometer radius";
} else {
  echo "Outside 100 kilometer radius";
}

答案 2

应使用哈弗正弦公式来计算两点之间的距离。您在此处有 PHP 版本

然后只需检查是否.distance < 100000


推荐