如何在 C# 或 SQL Server 中找到邮政编码之间的距离?

Posted

技术标签:

【中文标题】如何在 C# 或 SQL Server 中找到邮政编码之间的距离?【英文标题】:How can you find the distance between zip codes in C# or SQL Server? 【发布时间】:2011-06-22 13:48:27 【问题描述】:

必须有一种标准且有效的方法来做到这一点,因为它显然是许多网站上非常广泛使用的功能。

【问题讨论】:

【参考方案1】:

很遗憾,邮政编码距离计算器未包含在 .NET 框架中。以下是一些解决方法

Calculating the distance between two Zip Codes in C#

DISTANCE WIZARD API

【讨论】:

请添加一些提示,以防这些链接失效。【参考方案2】:

我不知道有没有“标准”的方式。

可能存在执行此操作的现有服务,并且可能存在您可以购买或免费获得的具有可用数据的数据库,但根据您的定义,这可能不容易计算。

想一想:您的问题可以解释为两点之间的最短距离(通过使用位于该邮政编码的城市中的一个点来作弊),或者它可以解释为两个邮政编码边界边缘之间的行驶距离。第一个计算相当简单,但不是 100% 准确。第二个不是一个简单的问题。找到最短的行驶距离是一个子问题,而在不规则边界的边缘找到最近的点是另一个子问题(或找到调用该特征的人的最近城市/已知坐标)。

因此,如果没有关于您要解决的实际问题的任何信息,我只能假设您不在乎您的数据有多准确。在这种情况下,我建议获取一个城市坐标数据库,它们所在的邮政编码,并使用标准减法/平方根来确定距离(勾股定理)。

如果您确实关心您的数据的准确性,我建议您进行研究以找到一个现有的数据库或服务,该数据库或服务具有为您预先计算或为您提供的更准确的信息。

【讨论】:

同意!什么是距离?先定义吧!是欧几里得距离(毕达哥拉斯,直线),是基于最短路径还是“最快”路径的行驶距离。假设这将是 SQL Server 或 .NET 中的内置功能对我来说听起来很奇怪。这通常是一个 OR(运筹学等计量经济学)问题。我认为会有这方面的服务,或者带有算法的数据库(我曾经使用过第三方组件),但你通常不会免费获得这些...... 感谢您的回答,梅林。没想到有这么多因素。不,不过,准确性并不是非常重要(在英里内就可以了。) 顺便说一句,我指的是与邮政编码中一点的直线距离。我正在研究 Arsen 提供的解决方案。 @Joep - 在我的问题中,您不会发现我认为它已“包含”在 .NET 或 SQL Server 中。我只要求最标准的做法。考虑下次提供帮助。【参考方案3】:

我写了一个 php 脚本来计算邮政编码之间的距离。从那以后,通过大量用户的反馈,它已经被修改,距离计算实际上是用 SQL 查询完成的,因为这是最有效的方法。

您需要一个包含邮政编码及其纬度/经度值的表格。网络上到处都有免费和商业数据库提供这些信息。

看看this PHP source code,看看calcDistanceSql()方法。在 SQL Server 中跟踪构建并实现它的查询应该足够简单。

【讨论】:

以上是关于如何在 C# 或 SQL Server 中找到邮政编码之间的距离?的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql server中通过给定的邮政编码和以英里为单位的半径从附近的表中获取所有其他邮政编码或(纬度和经度)?

SQL Server 数据库可以通过英国邮政编码驱动 Google 地图吗?

如何在 SQL Server 或 C# 代码中将行转换为列

C#与SQL Server建立连接出错

在哪里可以找到有关为 SQL Server Management Studio 创建插件的信息? [关闭]

使用 C# 的 SQL Server UDF