【问题标题】:Identifying the ZIP code of a location using Latitude and Longitude使用纬度和经度识别位置的邮政编码
【发布时间】:2019-07-14 10:48:23
【问题描述】:

我需要识别数据集中每条记录的邮政编码,该数据集中包含托管在 SQL Server 数据库中的以下格式的位置信息,

为了识别某个位置的邮政编码/邮政编码,我使用Geo Names 提供的信息,格式为 Country code、Postal code、Place、data1、data2、data3、data4、latitude、longitude 和 accuracy 为跟随在一个文本文件中,

如何识别第一个数据集中每条记录的邮政编码(检查位置 lat lang 是否在邮政编码的 lat lang 范围内)。我试图找出与该主题相关的任何先前问题,但我只能找到this 问题,其中答案没有详细说明得出答案所需的程序或计算(仅提供特定语言的解决方案)。

附言。这是我本科最后一年项目的要求。

【问题讨论】:

  • 对于每条记录,您需要找到最近的 邮政编码,但由于您没有告诉我们您的数据库服务器是什么,我们无法提供这部分的帮助。不过,应该有很多问题已经解决了这个问题。
  • 你卡在哪里了? stackoverflow.com/help/mcve
  • @DavidG 很抱歉没有列出这些技术。我现在已经更新了问题。
  • SQL Server 将为您完成所有这些工作。
  • @SoufianeTahiri 非常抱歉有任何混淆。我必须确定第一个数据集中每条记录的邮政编码。我获得了一个包含邮政编码和纬度信息的文本文件,但我不确定如何继续检查记录是否属于邮政编码的纬度。

标签: c# location geocoding zipcode geonames


【解决方案1】:

一种可行的方法,虽然有点蛮力,但将Haversine Formula 应用于您的初始数据集(您的第一张图片)中的一对 (Lat,Lon) 到 每个地理名称数据库中的 (Lat,Lon) 对的强>。

Haversine 公式为您提供两个纬度/经度对之间的大圆距离(请记住,地球是一个球体)。如果您使用第一行示例,纬度 40.769,经度 -73.9545,并循环浏览 GeoNames 数据库中的每条记录,计算大圆距离(对于北卑尔根、威霍肯、联合市等),跟踪最近的您找到的距离,应该可以很好地指示正确的邮政编码。

【讨论】:

  • 关于Haversine的观点很好,但是在这个应用场景中(一个位置的邮政编码),地球表面可以假设为平坦,因为邮政编码的面积不应该那么大地球表面的曲率成为一个重要因素。此外,由于邮政编码区域通常具有相当不规则的形状,因此当每个邮政编码区域仅给出一个点位置时,无论如何都无法避免某种模糊/错误
  • 假设平坦度 elgonzo 的有效点。我提供 Haversine 不仅是因为它在任何地方(平面或地球)的实用性,还因为它能够轻松计算给定纬度/经度对的距离。诚然,另一个功能可以被替代。但我认为这种方法是合理的。你关于邮政编码边界模糊的观点是一个很好的观点。在这里,我认为我们受制于向 GeoNames 地图投掷飞镖并决定给定点定义给定邮政编码的“中心”(?)的人 :-)
  • 我并没有试图诋毁您的答案并声称 Haversine 不是一种合理的方法。抱歉,如果我的评论可以这样解释,但这不是我的本意。当然,使用 Haversine 是一种合理的方法。我只是想指出,在此处给定使用场景的限制内,简化的方法也可能是可行的。再次,如果这有错误,我深表歉意......
  • 我根本没有那样做 elgonzo !!!你是完全正确的,它增加了讨论的价值,指出当你不考虑远距离时,你真的不需要求助于 Haversine 来获得准确的答案!感谢您加强讨论!
  • 我尝试寻找其他方法,但最终还是使用了这种方法,因为它非常简单。
猜你喜欢
  • 2019-04-16
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多