PHP计算用户和其他用户之间的距离(一个接一个)

PHP计算用户和其他用户之间的距离(一个接一个),php,mysql,distance,latitude-longitude,Php,Mysql,Distance,Latitude Longitude,我尝试过这段代码,但结果有点不对劲:我只得到了1km的结果,其他的结果是0,它得到了解决方案或所有用户或无人。也许我对mysql\u fetch\u数组的理解是错误的。这是php代码: <?php $response = array(); $username=$_POST["user"]; if($username!=null){ $latm=0; $lonm=0; mysql_connect("localhost:3306","blabla","lol"); mysql_select_d

我尝试过这段代码,但结果有点不对劲:我只得到了1km的结果,其他的结果是0,它得到了解决方案或所有用户或无人。也许我对mysql\u fetch\u数组的理解是错误的。这是php代码:

<?php
$response = array();
$username=$_POST["user"];
if($username!=null){
$latm=0;
$lonm=0;
mysql_connect("localhost:3306","blabla","lol");
mysql_select_db("my_app");
$posut1=mysql_query(" SELECT lat,lon FROM utenti WHERE user='$username' ");
$posut2= mysql_query(" SELECT lat,lon,user FROM utenti WHERE user!='$username' ");
if($posut1){
$row = mysql_fetch_array($posut1);
list($latm,$lonm)=$row;}
if ($posut2) {
$solutions = array();
$i=0;
while ($row = mysql_fetch_array($posut2))
  {
    list($lat2, $lng2, $us) = $row;
    $lat1=$latm;
    $lng1=$lonm;
    $pi80 = M_PI / 180;
$lat1 *= $pi80;
$lng1 *= $pi80;
$lat2 *= $pi80;
$lng2 *= $pi80;

$r = 6372.797; // mean radius of Earth in km
$dlat = $lat2 - $lat1;
$dlng = $lng2 - $lng1;
$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
$km = $r * $c;
   $kmm[$i]=$km;

      if(km<1000) $solutions[]=$row;
$i++;}  
$response["km"] = $kmm; 
$response["success"] = $solutions;


    // echoing JSON response
    print(json_encode($response));   

} else {
$response["success"] = 0;
    $response["message"] = "dati errati";

    // echoing JSON response
    print(json_encode($response));
}
}
?>

给你一些信息

function distance($lat1, $lon1, $lat2, $lon2, $unit) {

  $theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  $unit = strtoupper($unit);

  if ($unit == "K") {
    return ($miles * 1.609344);
  } else if ($unit == "N") {
      return ($miles * 0.8684);
    } else {
        return $miles;
      }
}

echo distance(32.9697, -96.80322, 29.46786, -98.53506, "M") . " Miles<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "N") . " Nautical Miles<br>";
功能距离($lat1,$lon1,$lat2,$lon2,$unit){
$theta=$lon1-$lon2;
$dist=sin(deg2rad($lat1))*sin(deg2rad($lat2))+cos(deg2rad($lat1))*cos(deg2rad($lat2))*cos(deg2rad($theta));
$dist=acos($dist);
$dist=rad2deg($dist);
$miles=$dist*60*1.1515;
$unit=strotupper($unit);
如果($单位=“K”){
返回(英里*1.609344);
}否则,如果($unit==“N”){
返回($miles*0.8684);
}否则{
返回$miles;
}
}
回波距离(32.9697,-96.80322,29.46786,-98.53506,“M”)。“英里
”; 回波距离(32.9697,-96.80322,29.46786,-98.53506,“K”)。“公里数
”; 回波距离(32.9697,-96.80322,29.46786,-98.53506,“N”)。“海里
”;

调试代码
$dlat=$lat2-$lat1
$dlng=$lng2-$lng1你得到了你想要的正确值吗?它解决了距离问题,但没有解决如果(公里)的问题
function distance($lat1, $lon1, $lat2, $lon2, $unit) {

  $theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  $unit = strtoupper($unit);

  if ($unit == "K") {
    return ($miles * 1.609344);
  } else if ($unit == "N") {
      return ($miles * 0.8684);
    } else {
        return $miles;
      }
}

echo distance(32.9697, -96.80322, 29.46786, -98.53506, "M") . " Miles<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "N") . " Nautical Miles<br>";