Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php从两个纬度和经度计算最近的纬度和经度_Php_Google Maps_Latitude Longitude - Fatal编程技术网

用php从两个纬度和经度计算最近的纬度和经度

用php从两个纬度和经度计算最近的纬度和经度,php,google-maps,latitude-longitude,Php,Google Maps,Latitude Longitude,假设我有lat1=21.154533和long1=79.045760,其中 x米的精度,另一个lat2=21.153184&long2=79.045882。也可以 我找到最近的位置lat,long相对于lat1& 在lat2和long2方向的帮助下进行long1 我终于找到了我自己问题的答案 使用Lat1,Long1和Lat2,Long2计算轴承/角度 计算Lat1,Long1和Lat2,Long2之间的距离 然后在Lat1、Long2附近生成新的Lat Long。 结论是,如果我们得到不正确的

假设我有lat1=21.154533和long1=79.045760,其中 x米的精度,另一个lat2=21.153184&long2=79.045882。也可以 我找到最近的位置lat,long相对于lat1& 在lat2和long2方向的帮助下进行long1


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

使用Lat1,Long1和Lat2,Long2计算轴承/角度 计算Lat1,Long1和Lat2,Long2之间的距离 然后在Lat1、Long2附近生成新的Lat Long。 结论是,如果我们得到不正确的lat2,long2值。但我们可以 精确计算lat,长近lat1和lat2及其精确角度。我们在集成信标技术时发现了这一挑战


检查这是不清楚的。你想找什么?两点之间的中点?如果你已经知道第1点和第2点,为什么你需要方向?精度与1点的位置有什么关系?定义最近的位置-最近的位置是什么?最近的距离是1公里?1米?1厘米?1毫米?我试图从lat1,long1中找到最近的坐标,因为我的lat2和long2每次都不精确,这是一个动态值,精度较低,取决于设备。因此,由于这个场景,我试图从lat1 long1中找出坐标!希望这些将有助于解决这个问题
    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;
    }
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; 
    }
$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);