ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL或PHP错误?距离计算

2019-12-08 00:16:47  阅读:157  来源: 互联网

标签:html mysql php math


我的档案有问题.我正在制作Travian Clone脚本,我们走得很远.现在,我们决定将人工制品添加到游戏中.

目标是显示与我们当前所在村庄最近的文物.代码为:

function getDistance($coorx1, $coory1, $coorx2, $coory2) {
          $max = 2 * WORLD_MAX + 1;
          $x1 = intval($coorx1);
          $y1 = intval($coory1);
          $x2 = intval($coorx2);
          $y2 = intval($coory2);
          $distanceX = min(abs($x2 - $x1), $max - abs($x2 - $x1));
          $distanceY = min(abs($y2 - $y1), $max - abs($y2 - $y1));
          $dist = sqrt(pow($distanceX, 2) + pow($distanceY, 2));

          return round($dist, 1);
      }


        unset($reqlvl);
        unset($effect);
        $arts = mysql_query("SELECT * FROM ".TB_PREFIX."artefacts WHERE id > 0");
        $rows = array();
        while($row = mysql_fetch_array($arts)) {
            $query = mysql_query('SELECT * FROM `' . TB_PREFIX . 'wdata` WHERE `id` = ' . $row['vref']);
            $coor2 = mysql_fetch_assoc($query);

            $wref = $village->wid;
            $coor = $database->getCoor($wref);
            $dist = getDistance($coor['x'], $coor['y'], $coor2['x'], $coor2['y']);

            $rows[$dist] = $row;

        }
        ksort($rows, SORT_ASC);
        foreach($rows as $row) {
            echo '<tr>';
            echo '<td class="icon"><img class="artefact_icon_'.$row['type'].'" src="img/x.gif" alt="" title=""></td>';
            echo '<td class="nam">';
            echo '<a href="build.php?id='.$id.'">'.$row['name'].'</a> <span class="bon">'.$row['effect'].'</span>';
            echo '<div class="info">';
            if($row['size'] == 1){
                   $reqlvl = 10;
                   $effect = "village";
               }elseif($row['size'] == 2 OR $row['size'] == 3){
                   $reqlvl = 20;
                   $effect = "account";
               }
            echo '<div class="info">Treasury <b>'.$reqlvl.'</b>, Effect <b>'.$effect.'</b>';
            echo '</div></td><td class="pla"><a href="karte.php?d='.$row['vref'].'&c='.$generator->getMapCheck($row['vref']).'">'.$database->getUserField($row['owner'],"username",0).'</a></td>';
            echo '<td class="dist">'.getDistance($coor['x'], $coor['y'], $coor2['x'], $coor2['y']).'</td>';
            echo '</tr>';
        }
?>

但是代码似乎是错误的,因为它显示的距离都相同. 14.8对我来说.我知道我的解释可能不好,但是您可能会明白我的需求.

解决方法:

恐怕您当前的代码无济于事,但是您可以尝试改用Haversine Formula

// Where: 
// $l1 ==> latitude1 
// $o1 ==> longitude1 
// $l2 ==> latitude2 
// $o2 ==> longitude2 
function haversine ($l1, $o1, $l2, $o2) { 
  $l1 = deg2rad ($l1); 
  $sinl1 = sin ($l1); 
  $l2 = deg2rad ($l2); 
  $o1 = deg2rad ($o1); 
  $o2 = deg2rad ($o2); 

  $distance = (7926 - 26 * $sinl1) * asin (min (1, 0.707106781186548 * sqrt ((1 - (sin ($l2) * $sinl1) - cos ($l1) * cos ($l2) * cos ($o2 - $o1))))); 

  return round($distance, 2);
}  

在go4expert.com上的信用记为this post,我过去使用过此功能,发现它工作得很好.

标签:html,mysql,php,math
来源: https://codeday.me/bug/20191207/2087358.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有