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:
el resultado me lo da para el primer registro, pero luego lo que hace es repetirme el mismo valor en todas las columnas..$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']);
2da forma: Aplique la siguiente formula:
Código:
el resultado fue que me mostraba un "NAN" en cada columna, supongo que es algun valor no determinado..$dist = acos(sin($g) * sin($h) + cos($g) + cos($h) * cos($i) - $j) * $earth;
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í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>
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>";
}
}
?>