【发布时间】:2009-08-14 15:47:59
【问题描述】:
我遇到的情况类似于在工作搜索引擎中发生的情况,您在其中输入要搜索工作的邮政编码,应用会返回该邮政编码以及邮政编码为 5、10 的工作,距离该邮政编码 15、20 或 25 英里,具体取决于用户设置的偏好。
您将如何计算邮政编码的相邻位置?
【问题讨论】:
标签: zipcode
我遇到的情况类似于在工作搜索引擎中发生的情况,您在其中输入要搜索工作的邮政编码,应用会返回该邮政编码以及邮政编码为 5、10 的工作,距离该邮政编码 15、20 或 25 英里,具体取决于用户设置的偏好。
您将如何计算邮政编码的相邻位置?
【问题讨论】:
标签: zipcode
您需要获取带有相关经度/纬度坐标的邮政编码列表。 Google it - 有很多提供者。
那就看this question的计算距离的算法
【讨论】:
我不知道您是否可以指望 geonames.org 在您的应用程序的整个生命周期内都存在,但您可以使用像他们这样的网络服务来避免重新发明轮子。
【讨论】:
我不会计算它,我会将它作为一个固定表存储在数据库中(仅当一个国家/地区的邮政编码分配发生变化时才会更改)。建立一个关系“is_neighbor_zip”,它有对(更小,更大)。要确定两个代码是否相邻,请在表中查看特定对。如果您想要所有相邻的拉链,最好使表格对称。
【讨论】:
您需要使用 GIS 数据库并询问您当前位置附近的邮政编码。
您不能简单地获取邮政编码并应用一些数学计算来查找附近的其他邮政编码。邮政编码不像美国的区号那样在地理上分散,但它们不是坐标系。
唯一的例外是邮政编码+4 是较大邮政编码的子部分。您可以假设任何具有相同邮政编码的邮政编码 + 4 代码彼此靠近。
我曾经在一家公司致力于合理化邮政编码处理,以下是我做的一些实用笔记:
希望有其他有用的信息。
【讨论】:
每当您创建邮政编码时,对其进行地理编码(例如,谷歌地理编码器 api,保存纬度和对数)然后用谷歌半正弦公式计算,这将计算与参考点的距离(如乌鸦飞行),该参考点也可以进行地理编码如果是城镇或邮政编码。
进一步澄清:
当您根据位置检索记录时,您需要将每个经度和纬度 DECIMAL 与参考点(您的用户地理编码的邮政编码或城镇名称)进行比较
您可以查询:
SELECT * FROM photos p WHERE p.long < 60 AND p.long > 50 AND p.lat > -10 AND p.lat > 10
要查找所有英国照片等,因为英国在 50 到 60 度经度和 +-10 度纬度之间(我可能已经用 lat 换了 long,我对此很模糊)
如果你想找到距离,那么你需要用谷歌搜索haversine公式并插入你的参考值。
希望这能让事情更清楚一点,如果您需要详细信息,请发表评论
【讨论】: