2012-06-19 26 views
5

En php, dado un punto de latitud y longitud, un rumbo (en grados) y una distancia (en pies o km o lo que sea) ¿cómo me imagino ¿Cuál es el nuevo punto de latitud? esto es lo que intenté, pero está mal.punto de longitud de latitud FI en php longitud latitud inicial, distancia y rodamiento

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

Respuesta

3

Sólo cambia

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

a

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

Según PHP's documentation about the modulus operator (%),

operandos de módulo se convierten en números enteros (por extracción de la parte decimal) antes del procesamiento .

fmod "[r] eturns el residuo de punto flotante (módulo) de la división de los argumentos."

+0

Gracias! Parece que estoy trabajando – user379468

0

Encontrar el punto latitud y longitud en php dado lng lat inicial, 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); 
    } 
Cuestiones relacionadas