Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/05/2012, 07:08
Avatar de Bullet
Bullet
 
Fecha de Ingreso: agosto-2005
Ubicación: Margarita, Venezuela
Mensajes: 235
Antigüedad: 18 años, 9 meses
Puntos: 1
Calculo de distancia entre dos puntos

que mas amigos, espero esten bien, les escribo por lo siguiente:

Necesito calcular la distancia entre dos puntos dadas sus coordenadas geograficas, lo estoy trabajando de a siguiente manera: ingreso las coordenadas de un punto en formato de latitud y longitud, el sistema me hace la conversion a formato decimal, y este ingresa todos los datos en los dos formatos en una tabla llamada "posiciones", luego extraigo todos los datos conforme los voy ingresando y los muestro en una tabla debajo del formulario,esta tabla contiene una columna al final donde se va a mostrar la distancia calculada entre los dos puntos, hasta ahi todo bien; luego para hacer los calculos de distancia, selecciono solo las coordenadas en formato decimal, y las asigno a 4 variables, dado que son 4 datos para poder aplicar la formula, el calculo lo hice de dos formas:

1ra forma: Aplique la siguiente consulta:

Código:
$d= mysql_query("SELECT (acos(sin(radians(l1)) * sin(radians(l2)) + cos(radians(l1)) * cos(radians(l2)) * cos(radians(lo1) - radians(lo2))) * 6378) as distp1p2 FROM posiciones_dist");
$dis=mysql_fetch_assoc($d);
$dist=($dis['distp1p2']);
el resultado me lo da para el primer registro, pero luego lo que hace es repetirme el mismo valor en todas las columnas..

2da forma: Aplique la siguiente formula:

Código:
$dist = acos(sin($g) * sin($h) + cos($g) + cos($h) * cos($i) - $j) * $earth;
el resultado fue que me mostraba un "NAN" en cada columna, supongo que es algun valor no determinado..

los 2 script que estoy usando son los siguientes.:

lat_long.php

Código PHP:
<?php
require_once('librerias/config.php');
$earth 6378;
$querys "SELECT * FROM posiciones_dist ORDER BY id DESC limit 5";
$que mysql_query($querys);
$e mysql_query('SELECT l1,l2,lo1,lo2 FROM  posiciones_dist order by id desc limit 1');
$f mysql_fetch_assoc($e);//Arreglo que guarda los valores de la consulta
$g = ($f['l1']);
$h = ($f['l2']);
$i = ($f['lo1']);
$j = ($f['lo2']);

$dist acos(sin($g) * sin($h) + cos($g) + cos($h) * cos($i) - $j) * $earth;
/*$d= mysql_query("SELECT (acos(sin(radians(l1)) * sin(radians(l2)) + cos(radians(l1)) * cos(radians(l2)) * cos(radians(lo1) - radians(lo2))) * 6378) as distp1p2 FROM posiciones_dist");
$dis=mysql_fetch_assoc($d);
$dist=($dis['distp1p2']);*/

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="css/cuscosky.css">
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="dist.php">
  <p>Latitud 1:
    <input type="text" name="l1" id="l1" onkeyup="latitud(this.value)" />
    <input type="text" name="ld1" id="ld1"  readonly="readonly"/>
  Longitud 1:
    <input type="text" name="lo1" id="lo1" onkeyup="longitud(this.value)" />
    <input type="text" name="lod1" id="lod1" readonly="readonly"/>
  </p>
  <p>Latitud 2:
    <input type="text" name="l2" id="l2" onkeyup="latitud2(this.value)" />
    <input type="text" name="ld2" id="l4" readonly="readonly"/>
  Longitud 2:
    <input type="text" name="lo2" id="lo2" onkeyup="longitud2(this.value)" />
    <input type="text" name="lod2" id="lo4" readonly="readonly"/></p>
  <p>
    <input type="submit" name="enviar" id="enviar" value="Enviar" />
  </p>
</form>
<table align="center" summary="Tabla de ejemplo">
  <caption>
    LATITUDES Y LONGITUDES
  </caption>
  <thead>
    <tr class="Estilo5">
      <th>LATIDUD1</th>
      <th>LATITUD_D1</th>
      <th>LATITUD2</th>
      <th>LATITUD_D2</th>
      <th>LONGITUD1</th>
      <th>LONGITUD_D1</th>
      <th>LONGITUD2</th>
      <th>LONGITUD_D2</th>
      <th>DISTANCIA</th>
     </tr>
  </thead>
  <tbody>
    <?php while ($rs mysql_fetch_assoc($que)) { ?>
    <tr class="Estilo7">
      <td><?php echo $rs['lat1']; ?></td>
      <td><?php echo $rs['l1']; ?></td>
      <td><?php echo $rs['lat2']; ?></td>
      <td><?php echo $rs['l2']; ?></td>
      <td><?php echo $rs['long1']; ?></td>
      <td><?php echo $rs['lo1']; ?></td>
      <td><?php echo $rs['long2']; ?></td>
      <td><?php echo $rs['lo2']; ?></td>
      <td><?php echo $dist?></td>
     </tr>
    <?php }  ?>
  </tbody>
</table>
<p>
</body>
</html>
dist.php

Código PHP:
<?php
require_once('librerias/config.php');
$mens="Los datos fueron registrados con exito"//Mensaje de guardado correcto de datos
$error '<a href="javascript: window.history.back()"><< Regresar a solucionar el problema</a>'//Mensaje de Error de guardado de los datos
if(!isset($_POST["enviar"])) { //Si nombre boton no es igual a registro, envia le mensaje
    
echo 'No puedes enviar  el formulario vacio, debes llenar todos los datos..<br />';
} else { 
//De lo contrario, a llenar las variables 
$lat1 $_POST["l1"]; 
$l1 $_POST["ld1"]; 
$lat2 $_POST["l2"]; 
$l2 $_POST["ld2"];
$long1 $_POST["lo1"];
$lo1 $_POST["lod1"];
$long2 $_POST["lo2"]; 
$lo2 $_POST["lod2"];
$sql mysql_query("INSERT INTO posiciones_dist (lat1,l1,lat2,l2,long1,lo1,long2,lo2) 
                   VALUES  ('$lat1','$l1','$lat2','$l2','$long1','$lo1','$long2','$lo2') "
);
     
 if(!
$sql) {    //Si hay error en la consulta de insercion, envie el error
        
echo 'Error en el registro.' $error '';
        exit;
    } else {
// De lo contrario ingresar los datos
        
print "<script>alert('$mens')</script>";
        print
"<script>document.location='lat_long.php'</script>";
    }    
}



?>
Quiero saber que es lo qe estoy aplicando mal, que no me funciona de ninguna de las dos formas, espero me puedan dar una manito. Saludos!!