根据 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.
假设我有 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.