邮政编码在一定范围内

时间:2011-06-08 12:13:11

标签: php zipcode

我有一个包含一系列条目的数据库(不超过数十万条),其中一个字段是邮政编码。

我希望创建一个脚本,当给出邮政编码和英里半径(如50英里,100英里)时,我可以找到该范围内的所有条目。

我在网上看过许多文章和脚本,允许人们这样做,但他们经常通过包含一个有点大量的自己的数据库来做到这一点。

有没有办法使用简单的计算,不需要数据库?

注意:准确性不是什么大问题。如果输入50英里它可以行驶60英里,那就完全没问题了。

修改

我注意到很多涉及获取邮政编码的纬度/经典的答案,但是,数据库只存储了邮政编码,所以我可以假设这包括追溯/存储每个条目的纬度/经度数据库也是?

6 个答案:

答案 0 :(得分:2)

如果准确性不是问题,您可以绘制邮政编码中心的经度和纬度,或粗略估计中心。然后,您可以使用脚本计算每个中心之间的距离 列出here。不需要使用如图所示here的半胱氨酸配方,这是非常准确的,您不需要。三角函数和反三角函数消耗了大量的计算资源,这是一种浪费。每次查询距离并让MySQL为每个邮政编码运行如此复杂的公式只是浪费资源。

如果你每天必须多次这样做,那么只需存储每个邮政编码之间的距离就可能更快(空间与速度权衡)。此类存储表中的条目总数是您拥有的邮政编码数的平方。每次运行数以万计的邮政编码计算消耗大量的计算能力,更不用说对最终用户来说更慢。

此外,此前有人问过类似的问题,请查看此问题的接受答案,它适用于您的情况:Calculate distance between zip codes and users

答案 1 :(得分:2)

没有。邮政编码遵循certain logic at a high level,但邮政编码和位置之间没有算法映射(即邮政编码已分配到某个位置,而不是计算位置 - 此过程由邮政当局(USPS在美国)监督,但它始终考虑非地理因素,例如人口密度;因此无法从一个位置计算邮政编码,反之亦然)。

所以,你需要那个“大量数据库”来告诉你哪个邮政编码属于哪个位置;获得位置后,您可以像往常一样计算出半径范围内的条目。

(您可以查询网络服务,但这只是隐藏了云中的数据库 - 在某些时候,某人必须检查90210在物理上的位置。)

答案 2 :(得分:2)

在这种情况下可能适合或不适合的另一个选择是在寻找半径时使用县。对于我参与过的大多数项目,用户都了解他们的县并且熟悉它。您可以以20至40美元的价格购买一个县以压缩数据库(和城市/州/等)。它可以在许多不同的项目中一次又一次地重复使用。它不一定能为您提供10/25/50/100英里半径的确切能力,但可能允许您根据请求的邮政编码执行半径查找的我的区域样式。

答案 3 :(得分:0)

您需要的主要是将这些邮政编码转换为地理坐标(即纬度和经度夫妻)。完成后,您可以查看this presentation,其中详细说明了如何按距离给定坐标进行搜索。

答案 4 :(得分:0)

你可以使用谷歌地图来获得纬度和这个邮政编码的经度,查询可能就像这个“zip”,

您可以阅读此http://www.movable-type.co.uk/scripts/latlong.html以了解如何计算点到点之间的距离

以下是如何使用SQL http://www.movable-type.co.uk/scripts/latlong-db.html执行此操作,首先计算范围,然后按此范围搜索(它将更快地运行)

答案 5 :(得分:0)

一种选择是使用Google maps api查找您所在位置的纬度和长度。然后,您必须在数据库中为每个邮政编码设置一个lat和long,然后编写一个脚本来计算。

相关问题