2012-06-19 21 views
5

W php, biorąc pod uwagę punkt szerokości i długości geograficznej, namiar (w stopniach) i odległość (w stopach lub km lub czymkolwiek), jak mogę określić jaki jest nowy punkt lat lng? tutaj jest to, co próbowałem, ale jest źle.Punkt szerokości geograficznej szerokości geograficznej w php przy podanej początkowej długości lng, odległości i namiaru

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

Odpowiedz

3

tylko zmienić

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

do

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

Według PHP's documentation about the modulus operator (%),

operandy modułu są przekształcane do liczb całkowitych (o odpędzenie część dziesiętna) przed obróbką .

fmod "[r] dodaje wartości pozostałej części zmiennoprzecinkowej (modulo) podziału argumentów."

+0

Dzięki! tseem do pracy – user379468

0

Znajdź szerokość i długość geograficzna punktu początkowego w php daną łac 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); 
    } 
Powiązane problemy