Excel 邮政编码距离计算器

Excel 邮政编码距离计算器,excel,vba,distance,zipcode,Excel,Vba,Distance,Zipcode,我有一个地址的电子表格,我需要计算他们所有的邮政编码和我的邮政编码之间的距离。我对所使用的方法相当灵活,但我希望使用某种Web服务或数学算法。仅限美国地址。基本上,我需要输入2个邮政编码,并找出它们之间的距离 我愿意使用Excel公式或VBA,如果需要,我甚至可以用C#.net编写代码 你将如何计算这些距离 其实很简单。下载一个邮政编码的GPS坐标数据库,有很多网站可以下载这些数据。他们会列出邮政编码中心的坐标 使用公式计算最短距离:(例如:)您可以使用纬度和经度 卓越: =IF(SIN(Lat

我有一个地址的电子表格,我需要计算他们所有的邮政编码和我的邮政编码之间的距离。我对所使用的方法相当灵活,但我希望使用某种Web服务或数学算法。仅限美国地址。基本上,我需要输入2个邮政编码,并找出它们之间的距离

我愿意使用Excel公式或VBA,如果需要,我甚至可以用C#.net编写代码


你将如何计算这些距离

其实很简单。下载一个邮政编码的GPS坐标数据库,有很多网站可以下载这些数据。他们会列出邮政编码中心的坐标


使用公式计算最短距离:(例如:)

您可以使用纬度和经度

卓越:

=IF(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1 - Long2) > 1, 
RadiusofEarth * ACOS(1), RadiusofEarth * 
ACOS(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1-Long2)))
net导入System.Math

Private Function Distance(ByVal lat1 As Double, ByVal lon1 As Double, ByVal lat2 As Double, ByVal lon2 As Double, ByVal unit As String) As Double
        Dim theta As Double = lon1 - lon2
        Dim dist = System.Math.Sin(deg2rad(lat1)) * System.Math.Sin(deg2rad(lat2)) + System.Math.Cos(deg2rad(lat1)) * System.Math.Cos(deg2rad(lat2)) * System.Math.Cos(deg2rad(theta))
        dist = System.Math.Acos(dist)
        dist = rad2deg(dist)
        dist = dist * 60 * 1.1515
        Select Case unit
            Case "K"
                dist = dist * 1.609344
            Case "N"
                dist = dist * 0.8684
        End Select

        Return dist

    End Function
其他有用的链接(第一个也提到VBA替代方案)

(还提到VBA替代方案)

编辑:由于评论讨论而添加的链接


你看过谷歌地图api吗?@Amir Raminfar-当我上次看谷歌地图api时,限制是检索到的任何信息都必须显示在地图上才能满足Lisence的要求。我不想在地图上显示。你介意解释一下Excel公式背后的逻辑吗?我看不出它与你链接到的Chip Pearson网站上的公式相匹配。此外,这假设地球是球形的,而不是更真实的椭球体,但我想这对于这个应用来说是完美的,因为不确定性将比邮政编码的大小小得多。。。也许除了在大而紧凑的城市,那里的邮政编码区域可能非常小。也许是我太肛门化了。@Jean-Francois Corbett Excels需要转换成弧度(我将在回答中提供另一个链接)。我不是想把它拆开,也不是像你那样思考。但你确实提出了一个很好的观点。我想这取决于他想要的精确程度。这就是为什么我把他和另一个选择联系起来。