根据 php 中的两个经纬度计算最近的经纬度

calculate nearest latitude and longitude from two latitude and longitude in php

假设我有 lat1=21.154533 & long1=79.045760 x 米的精度,另一个 lat2=21.153184 & long2=79.045882。所以可以 我找到了关于 lat1 & 的最近位置 (lat,long) long1 在 lat2 和 long2 方向的帮助下?

我终于找到了自己问题的答案。

  • Calculate Bearing/Angle using Lat1,Long1 & Lat2,Long2
    function bearing($lat1, $long1, $lat2, $long2){
    $bearingradians = atan2(asin($long1-$long2)*cos($lat2),
    cos($lat1)*sin($lat2) - sin($lat1)*cos($lat2)*cos($long1-$long2)); 
    $bearingdegrees = abs(rad2deg($bearingradians));
    return $bearingdegrees;
    }
  • Calculate Distance between Lat1,Long1 & Lat2,Long2
function distance($lat1, $lon1, $lat2, $lon2) {
      $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);
      $distanceMeters = $dist * 60 * 1000;
     return $distanceMeters; 
    }
  • Then Generate New Lat Long near to Lat1,Long2.
$earthRadius = 6371000;
$lat1 = deg2rad(21.156845);
$lon1 = deg2rad(79.053331);
$lat2 = deg2rad(21.156805);
$lon2 = deg2rad(79.057634);

//$bearing = $this->bearing($lat1,$lon1,$lat2,$lon2); //you can get value from above function
//$distance = $this->distance($lat1,$lon1,$lat2,$lon2);//you can get value from above function
$bearing = deg2rad(90);
$distance =100;
$Newlat = asin(sin($lat1) * cos($distance / $earthRadius) + cos($lat1) * sin($distance / $earthRadius) * cos($bearing));
$Newlon = $lon1 + atan2(sin($bearing) * sin($distance / $earthRadius) * cos($lat1), cos($distance / $earthRadius) - sin($lat1) * sin($Newlat));
echo 'distance: ' .$distance;
echo 'bearing: ' .$bearing;
echo 'LAT: ' . rad2deg($Newlat);
echo 'LNG: ' . rad2deg($Newlon);

The conclusion is if we get incorrect lat2,long2 values. But we can exact calculate lat,long near lat1 and lat2 with its accurate angle. This challenge we found while integrate beacons technology.