【问题标题】:Get zip code from latitude/longitude从纬度/经度获取邮政编码
【发布时间】:2013-03-08 22:10:39
【问题描述】:

我有一个控件,允许用户输入邮政编码或在 iframe 中打开谷歌地图,然后点击地图选择位置。我目前所有这些都正常工作,iframe 会将点击事件中的纬度/经度发送回父级。

我还设置了一个数据库表,其中经纬度字段映射到邮政编码。

但是,纬度/经度组合很可能永远不会完全匹配我在数据库中的条目。所以,我正在寻找匹配最近邮政编码的最佳方式。

因为用户可以手动输入邮政编码,所以我并不完全担心精度(即,如果用户点击邮政编码之间的边界),但我希望它尽可能接近。我现在只需要担心美国的位置。

我目前对解决方案的想法是提出一些公差(.2?)并查询 db 以获取 lat/long +- 公差。然后从结果集中选择最接近的匹配项。

我很想听听以前做过这件事的人,或者有比我建议的解决方案更好的解决方案。我对使用服务不感兴趣,因为我拥有所需的所有数据。

我对我提出的解决方案的一个担忧是弄清楚什么是好的容忍度。该项目针对农村地区,我不确定这些地区的纬度/经度条目的分布范围。

编辑:这是我的表结构: zip5 |城市|状态 |纬度 |隆 |县

zip5是主键

【问题讨论】:

  • 请问您为什么要尝试将纬度/经度转换为邮政编码?一旦你有了纬度/经度,你就有了通过接近度来找到其他实体的关键。拥有邮政编码对您有什么好处,而拥有纬度/经度却无法满足您的需求?
  • @Tim 根据我给出的设计规范,zip 将显示在 html 输入中。我可以反对它,但这似乎不应该那么困难。
  • 如果您需要查找 2 组 lat/lon 之间的距离,请 google Greatest Circle Distance ... 然后您可以轻松计算从给定邮政编码(lat/lon)到那些的距离你有档案...
  • 但是您必须使用诸如 R-trees 之类的东西或一些类似的方法来将查询限制为仅附近的一组 zip,或者您必须测量到所有这些 zip 的距离并选择最近的。
  • @dleiftah:the ones you have on file。如果你有所有的邮政编码文件怎么办?

标签: mysql location


【解决方案1】:

一分钟纬度(即 1/60 度)= 1 海里,或约 6,000 英尺。因此 5 分钟。纬度 = 约 30,000 英尺 = 约 6 英里。

经度向两极变窄,但如果我们将美国大陆视为大约北纬 36 度,请给予或接受(我同意,但对于这个应用来说,一个近似值应该足够了),然后是一分钟的经度 ~ 1纳米* cos 36 ~ 6,000 * 0.81 = 4,850 英尺。

由于邮政编码(或至少前 5 位数字)代表邮局,在农村地区,邮局可能相距 20 到 30 英里,因此您可能会比使用约 1/2 的经纬网格做得更差那个,或者说10分钟。纬度 x 12 分钟。经度。方便的分别是 1/6 度和 1/5 度。

【讨论】:

  • 感谢您富有洞察力的回复。看起来这些价值观很可能是一个体面的工作容忍度。
【解决方案2】:

这个问题的典型解决方案是使用 R-trees。

【讨论】:

  • 从我所做的阅读中我同意你的看法。不幸的是,我不确定如何为所有邮政编码创建边界框。
  • 边界框可以是任意大小,并且可以通过其左上角和右下角坐标来定义。假设您制作了 25 x 25 英里的盒子。您将创建边界框表。然后你会迭代你的边界框表,然后在一个嵌套循环中迭代你的邮政编码表并计算邮政编码的质心是否落在盒子内。如果是这样,您将在链接表中创建一个boundingbox-zipcode 链接。在运行时,您计算点击发生在哪个边界框,选择其链接的拉链,并计算到每个拉链的距离,选择最近的。
  • 谢谢,这是有道理的。希望我的 zip 表的 lat/lon 字段是质心,这样会更容易。
【解决方案3】:

您可能希望放弃自己的数据库查找并使用已经执行此操作的 Web 服务,例如 GeoNames。有关更多信息,请参阅 SO 问题 Get zip code from latitude, longitude?。看起来它已经做了你想做的事情,但没有所有的计算和公差。

【讨论】:

  • 我在我的问题中特别写了我对服务不感兴趣。我拥有完成这项工作所需的一切,我只需要能够通过查询过滤大部分数据。
猜你喜欢
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多