2012-06-19 38 views
5

Trong php, cho một vĩ độ và kinh độ, một ổ đỡ (bằng độ) và khoảng cách (tính bằng feet hoặc km hoặc bất kỳ) điểm lng lat mới là gì? đây là những gì tôi đã thử, nhưng nó sai.Điểm vĩ độ kinh độ vĩ độ trong php ban đầu cho phép vĩ độ lng, khoảng cách, và vòng bi

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

Trả lời

3

Chỉ cần thay đổi

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

để

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

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

Phép toán của mô đun được chuyển đổi thành số nguyên (bằng cách tách phần thập phân) trước khi chế biến .

fmod "[r] eturns điểm còn lại nổi (modulo) của việc phân chia các đối số."

+0

Cảm ơn! tseem làm việc – user379468

0

Tìm điểm kinh độ vĩ độ trong php trao ban đầu lng lat, 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); 
    } 
Các vấn đề liên quan