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