2

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

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

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

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

我目前对解决方案的想法是提出一些容差(.2?)并在数据库中查询纬度/经度 +- 容差。然后从结果集中选择最接近的匹配项。

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

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

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

zip5 是主键

4

3 回答 3

2

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

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

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

于 2013-03-08T22:38:25.787 回答
1

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

于 2013-03-08T22:43:10.170 回答
1

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

于 2013-03-08T23:23:35.383 回答