邮编距离计算器

6
我有一个地址电子表格,需要计算所有地址的邮政编码与我的邮政编码之间的距离。我对使用的方法相当灵活,但希望能够使用某种类型的Web服务或数学算法。仅适用于美国地址。基本上,我需要输入2个邮政编码并获得它们之间的距离。
我愿意使用Excel公式或VBA,甚至可以在C#.net中编写代码。
您将如何计算这些距离?

1
你看过 Google 地图 API 吗? - Amir Raminfar
@Amir Raminfar - 我上一次查看谷歌地图API时,限制是任何检索到的信息都必须在地图上显示,以满足许可要求。但我不想在地图上显示。 - MAW74656
2个回答

4
您可以使用纬度和经度。
Excel:
=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)))

VB.net imports 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的替代品)

ExcelLatLong(还提到了VBA的替代品)

根据纬度和经度查找邮政编码

VBA讨论

编辑:由于评论讨论,添加了链接

更多信息(Excel公式)


你介意解释一下你的Excel公式背后的逻辑吗?我没有看到它与你链接到的Chip Pearson网站上的公式相匹配。此外,这假设地球是球形而不是更现实的椭球体,但我想对于这个应用程序来说,这完全没问题,因为不确定性将比邮政编码区域的大小小得多...除了在大型紧凑城市中,邮政编码区域可能非常小。也许我太过于苛求了。 - Jean-François Corbett
@Jean-Francois Corbett Excel需要转换为弧度(我将在我的答案中提供另一个链接)。当我编写它时,我并没有试图分解它,也没有像你那样思考。但你说得很好。我想这取决于他想要多精确。这就是为什么我给他提供了另一个选择的原因。 - sealz

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接