【发布时间】:2010-09-07 09:13:06
【问题描述】:
我刚刚为我父亲的公司开发了一个邮政编码距离计算器,我们所有的客户都保存在档案中,每次有新的潜在客户进行查询时,系统都会检查所有其他客户的邮政编码。问题是它还没有进行距离计算。输入距离设置为 5 英里的 DT1 邮政编码表示 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...
以前有没有人成功做过类似的事情?
我确实有大量文件 - 总共约 158MB - 包含完整的每个英国邮政编码,以及相应的纬度和经度。我的目标是,而不是将指定的完整邮政编码与其他所有完整邮政编码进行比较,而是找出哪些区号小于一定距离,然后将指定的邮政编码与这些区域内的所有完整邮政编码进行比较。这有效率吗?有没有更有效的方法?
对此的任何帮助将不胜感激。
问候,
理查德
PS 我知道那里有一些网站可以告诉你如何计算距离,但我似乎无法让它们中的任何一个正常工作(从上面你可以看出)。
PPS 我知道我可以为此使用 Google API - 但这不是一个选项,因为这将是一个在本地安装的 wamp 服务器上运行的离线应用程序。它用于我们无法保证互联网连接的贸易展览。
【问题讨论】:
-
关于
+/- 0.00000989{and lots of other numbers},只是取整误差 -
它应该仍然是 0,当然......不管计算是什么,如果数字相同,它应该是 0......当我将它四舍五入到 2 dp 时我确实知道它在0 它只是四舍五入 - 但它不应该需要四舍五入..
标签: php distance latitude-longitude postal-code