【问题标题】:How do you figure out what the neighboring zipcodes are?你怎么知道相邻的邮政编码是什么?
【发布时间】:2009-08-14 15:47:59
【问题描述】:

我遇到的情况类似于在工作搜索引擎中发生的情况,您在其中输入要搜索工作的邮政编码,应用会返回该邮政编码以及邮政编码为 5、10 的工作,距离该邮政编码 15、20 或 25 英里,具体取决于用户设置的偏好。

您将如何计算邮政编码的相邻位置?

【问题讨论】:

    标签: zipcode


    【解决方案1】:

    您需要获取带有相关经度/纬度坐标的邮政编码列表。 Google it - 有很多提供者。

    那就看this question的计算距离的算法

    【讨论】:

      【解决方案2】:

      我不知道您是否可以指望 geonames.org 在您的应用程序的整个生命周期内都存在,但您可以使用像他们这样的网络服务来避免重新发明轮子。

      http://www.geonames.org/export/web-services.html

      【讨论】:

      • 这个答案没有提供有关如何使用 Web 服务来实际解决问题的信息。
      【解决方案3】:

      我不会计算它,我会将它作为一个固定表存储在数据库中(仅当一个国家/地区的邮政编码分配发生变化时才会更改)。建立一个关系“is_neighbor_zip”,它有对(更小,更大)。要确定两个代码是否相邻,请在表中查看特定对。如果您想要所有相邻的拉链,最好使表格对称。

      【讨论】:

      • 假设现在有 50K 邮政编码(还有更多)。所以你看的是50,000!连接表中的行大约是 10 的 200,000 次方:en.wikipedia.org/wiki/Factorial 你确定这是一个好方法吗?
      • 为什么会有50000!行(假设您用 ! 表示阶乘)。如果有相邻的,您只列出一对邮政编码。如果您的国家有 50000 个邮政编码(我的只有 17000 个),并且假设每个区域平均有 10 个邻居,那么数据库将只有 500,000 个条目。假设您可以将邮政编码放在四个字节中,那么您需要 2 MB 的存储空间来存储原始数据。
      • "ZIP" 是指美国邮政编码,有超过 50,000 个,但这并不重要。当你说“邻居”时,你到底是什么意思? OP 想找到当前邮政编码一定距离内的所有邮政编码。根据该距离,您可以拥有很多不是直接邻居的邮政编码。您的解决方案可能适用于小距离,但我会质疑它在 100 英里以上的距离的效率。
      • 查看 OP 问题的标题。他正在询问附近的邮政编码。如果相邻邮政编码列表可能变长(由任何指标确定),那么求职的结果也会变长,因此应用程序很可能只对“真正的”相邻区域感兴趣(即一小部分,甚至是候选人总名单的常数)。即使你寻找“无限制”的街区,也不会接近50000!条目 - 最坏的情况是 50000^2。
      • OP 问题的标题确实不清楚;但是,他在问题中明确表示,他正在寻找“距该邮政编码 5、10、15、20 或 25 英里”的邮政编码。 50,000 阶乘数字是错误的,我误解了您的建议。但是,我仍然认为您的方法不适用于较大的距离。郑重声明,我不是投反对票的人。但是,由于我的错误估计可能导致反对票,因此我赞成投票以进行补偿。
      【解决方案4】:

      您需要使用 GIS 数据库并询问您当前位置附近的邮政编码。

      您不能简单地获取邮政编码并应用一些数学计算来查找附近的其他邮政编码。邮政编码不像美国的区号那样在地理上分散,但它们不是坐标系。

      唯一的例外是邮政编码+4 是较大邮政编码的子部分。您可以假设任何具有相同邮政编码的邮政编码 + 4 代码彼此靠近。

      我曾经在一家公司致力于合理化邮政编码处理,以下是我做的一些实用笔记:

      Testing ZIP codes

      希望有其他有用的信息。

      【讨论】:

        【解决方案5】:

        每当您创建邮政编码时,对其进行地理编码(例如,谷歌地理编码器 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公式并插入你的参考值。

        希望这能让事情更清楚一点,如果您需要详细信息,请发表评论

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-23
          • 2021-08-18
          • 2011-05-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多