代码之家  ›  专栏  ›  技术社区  ›  ClarkeyBoy

邮政编码距离计算

  •  0
  • ClarkeyBoy  · 技术社区  · 14 年前

    我刚刚为我爸爸的公司开发了一个邮政编码距离计算器,在那里我们所有的客户都被存档,每次有新的潜在客户查询时,系统都会对照所有其他客户的邮政编码进行检查。问题是它还没有进行距离计算。输入DT1的邮政编码,距离设置为5英里,表示DT1、2和3就在附近。DT2表示DT1和2,DT3表示DT1、3和4。这没有任何意义。然而,如果我把BH2放在50英里以外的地方,它将带回伯恩茅斯、多切斯特、朴茨茅斯、巴斯、南安普顿和其他几个城镇。这些都是正确的-但是我不知道是怎么回事与DT邮政编码。DT11没有带回任何(5英里以下),DT10也没有(除了他们自己)。

    我首先用了(x*x+y*y)的根,我相信这就是毕达哥拉斯定理。。不确定,因为我用这个词已经好几年了!!

    我还尝试了以下方法:

      $sinstuff = sin(deg2rad($latitude))*sin(deg2rad($latitude2));
      $cosstuff = cos(deg2rad($latitude))*cos(deg2rad($latitude2))*cos(deg2rad($longitude-$longitude2));
      $sumstuff = $sinstuff + $cosstuff;
      $acosstuff = rad2deg(acos($sumstuff));
      $distance = $acosstuff*60*1.1515; //dunno what the 60 and 1.1515 is all about - I got this formula off a website.
    

    这是一个公式,它似乎带来了奇怪的结果。我还注意到DT11和DT11之间的精确距离是+/-0.00000989{和许多其他数字}。这似乎也有点奇怪,因为,当然,DT11和它本身之间的距离是0。。。

    任何帮助都将不胜感激。

    当做,

    理查德

    PPS我知道我可以使用googleapi来实现这一点,但这不是一个选项,因为这将是一个在本地安装的wamp服务器上运行的离线应用程序。它是用于贸易展览,我们不能保证互联网连接。

    2 回复  |  直到 14 年前
        1
  •  1
  •   ndrix    14 年前

    你用的是哈弗森公式:


    $o1==>纵向1

    $o2==>纵向2

    http://www.go4expert.com/forums/showthread.php?t=339

    function haversine ($l1, $o1, $l2, $o2)
    {
    $l1 = deg2rad ($l1);
    $sinl1 = sin ($l1);
    $l2 = deg2rad ($l2);
    $o1 = deg2rad ($o1);
    $o2 = deg2rad ($o2);
    return (7926 - 26 * $sinl1) * asin (min (1, 0.707106781186548 * sqrt ((1 - (sin ($l2) * $sinl1) - cos ($l1) * cos ($l2) * cos ($o2 - $o1)))));
    }

    这应该给你两点之间的距离。

        2
  •  1
  •   Community CDub    4 年前

    我想邮局有一个邮政编码地址文件 每个英国邮政编码及其相关地址(不确定是否有) 不完全是最新的)在各种PC杂志的封面光盘上 通过从后面查看封面光盘可以获得一个起点 问题。