FInd longitude latitude point in php, given initial width, distance and bearing

In php, given the point of latitude and longitude, the bearing (in degrees) and the distance (in feet or kilometer or something else), how can I determine what the new lat lng point is? this is what i tried but it is wrong.

function destinationPoint($lat, $lng, $brng, $dist) {
      $meters = $dist/3.2808399; // dist in meters
      $dist =  $meters/1000; // dist in km
      $rad = 6371; // earths mean radius
      $dist = $dist/$rad;  // convert dist to angular distance in radians
      $brng = deg2rad($brng);  // conver to radians 
      $lat1 = deg2rad($lat); 
      $lon1 = deg2rad($lng);

      $lat2 = asin(sin($lat1)*cos($dist) + cos($lat1)*sin($dist)*cos($brng) );
      $lon2 = $lon1 + atan2(sin($brng)*sin($dist)*cos($lat1),cos($dist)-sin($lat1)*sin($lat2));
      $lon2 = ($lon2+3*M_PI) % (2*M_PI) - M_PI;  // normalise to -180..+180º
      $lat2 = rad2deg($lat2);
      $lon2 = rad2deg($lon2);


        echo "lat2 = ".$lat2."<br/>";
        echo "lon2 = ".$lon2."<br/>";
    }
+5
source share
2 answers

Just change

$lon2 = ($lon2+3*M_PI) % (2*M_PI) - M_PI;

to

$lon2 = fmod($lon2 + 3*M_PI, 2*M_PI) - M_PI;

According to the PHP documentation on the operator module ( %) ,

The operands of the module are converted to integers (by removing the decimal part) before processing.

fmod "[r] returns the remainder of the floating point (modulo) division of arguments."

+3
source

php, ,

    $lat = $_GET['lat'];
    $lng = $_GET['lng'];
    $dist = $_GET['dist'];

    function destinationPoint($lat = null, $lng = null, $dist = null) {

         // index.php?lat=23.733023&lng=90.398384&dist=5
         // $lat = null, $lng = null, $brng = null, $dist = null
         //$lat = 23.7545821;
         //$lng = 90.3896952;

        $brng = 360;
        $feet = ($dist * 3280.84); // 1 KM = 3280.84 feet 
        $per_meter = 3.2808399; // 1 meter = 3.2808399 feet
        $circular_geo_location = array();

        for ($i = 45; $i <= 360; $i+=45) {
            $meters = $feet / $per_meter; // dist in meters
            $dist = number_format(($meters / 1000), 6); // dist in km
            $rad = 6371; // earths mean radius
            $dist = $dist / $rad;  // convert dist to angular distance in radians
            $brng = deg2rad($i);  // conver to radians $brng
            $lat1 = deg2rad($lat);
            $lon1 = deg2rad($lng);

            $lat2 = asin(sin($lat1) * cos($dist) + cos($lat1) * sin($dist) * cos($brng));
            $lon2 = $lon1 + atan2(sin($brng) * sin($dist) * cos($lat1), cos($dist) - sin($lat1) * sin($lat2));
            $lon2 = fmod($lon2 + 3 * M_PI, 2 * M_PI) - M_PI;  // normalise to -180..+180º
            $lat2 = number_format(rad2deg($lat2), 6);
            $lon2 = number_format(rad2deg($lon2), 6);

            $circular_geo_location[] = array(
                'lat' => doubleval($lat2),
                'lng' => doubleval($lon2)
            );
        }

          echo json_encode($circular_geo_location);
    }
0

All Articles