2012-06-19 5 views
5

In PHP, gegeben einen Breiten- und Längengrad, eine Peilung (in Grad) und eine Entfernung (in Fuß oder km oder was auch immer) wie stelle ich Was ist der neue Breitengrad? Hier ist, was ich versucht habe, aber es ist falsch.Fnd Breitengrad Längengrad in PHP gegeben Anfangs lat lng, Abstand und Peilung

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/>"; 
    } 

Antwort

3

Gerade

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

zu

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

Nach PHP's documentation about the modulus operator (%),

Operanden des Moduls auf ganze Zahlen umgewandelt werden (von der Dezimalteil Stripping) vor der Verarbeitung .

fmod "[r] etzt den Gleitkommarest (Modulo) der Division der Argumente."

+0

Dank! tseem zu arbeiten – user379468

0

finden Breitengrad Längengrad Punkt in PHP gegebenen Anfangs lat lng, distance`

$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); 
    }