2

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

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

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

有没有办法在不需要数据库的情况下使用简单的计算?

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

编辑

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

4

6 回答 6

2

如果准确性不是问题,您可以绘制邮政编码中心的经度和纬度,或对中心进行粗略估计。然后,您可以让脚本使用此处列出的公式计算每个中心之间的距离。不需要使用此处所示的半正弦公式,这是为了获得极高的准确性,您不需要。三角函数和反三角函数会消耗大量计算资源,是一种浪费。每次都查询距离,让MySQL对每个邮政编码都跑这么复杂的公式,简直是浪费资源。

如果您每天必须多次执行此操作,则仅存储每个邮政编码之间的距离可能会更快(此处为空间与速度权衡)。这种存储表中的条目总数是您拥有的邮政编码数量的平方。每次运行数以万计的邮政编码来计算会消耗大量的计算能力,更不用说最终用户的速度会变慢。

此外,之前已在此处提出过类似问题,请查看此问题的已接受答案,它适用于您的情况:计算邮政编码与用户之间的距离

于 2011-06-08T12:19:57.387 回答
2

不会。邮政编码在高层次上确实遵循某些逻辑,但邮政编码和位置之间没有算法映射(即,邮政编码被分配给一个位置,而不是为一个位置计算- 这个过程由邮政当局监督( USPS 在美国),但它总是会考虑非地理因素,例如人口密度;因此不可能从一个位置计算邮政编码,反之亦然)。

因此,您需要那个“庞大的数据库”来告诉您哪个邮政编码属于哪个位置;一旦你有了位置,你就可以像往常一样计算哪些条目在半径内。

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

于 2011-06-08T12:20:11.393 回答
2

Another option that may or may not be suitable in this situation is to use counties when looking for a radius. For most of the projects I have worked on, the user is aware of their county and is familiar with it. You can buy a county to zip database (and city/state/etc) for $20-$40. It is something that can be reused over and over again in many different projects. It doesn't necessarily give you the exact ability to do a 10/25/50/100 mile radius, but may allow you to perform an in my region style of radius lookup based upon the requested zipcode.

于 2011-06-08T12:47:54.150 回答
0

您可以使用谷歌地图来获取此邮政编码的纬度和经度,查询可能像这样“邮编”

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

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

于 2011-06-08T12:19:40.707 回答
0

一种选择是使用谷歌地图 api 来查找您所在位置的经纬度。然后,您必须在数据库中为每个邮政编码提供经纬度,然后编写一个脚本从那里进行计算。

于 2011-06-08T12:21:21.870 回答
-1

您需要的主要是将这些邮政编码转换为地理坐标(即纬度和经度对)。完成后,您可以查看此演示文稿,该演示文稿详细说明了如何根据给定坐标的距离进行搜索。

于 2011-06-08T12:18:31.753 回答