我有一个地址电子表格,我需要计算所有邮政编码和我的邮政编码之间的距离。我对所使用的方法非常灵活,但我希望有某种Web服务或数学算法。美国地址只。基本上我需要输入两个邮政编码,并让他们之间的距离。邮政编码距离计算器
我愿意使用Excel公式或VBA,如果需要,我甚至可以用C#.net编写代码。
你将如何去计算这些距离?
我有一个地址电子表格,我需要计算所有邮政编码和我的邮政编码之间的距离。我对所使用的方法非常灵活,但我希望有某种Web服务或数学算法。美国地址只。基本上我需要输入两个邮政编码,并让他们之间的距离。邮政编码距离计算器
我愿意使用Excel公式或VBA,如果需要,我甚至可以用C#.net编写代码。
你将如何去计算这些距离?
其实很简单。下载邮政编码的GPS坐标数据库,有大量的网站可以下载这些数据。他们将列出邮政编码中心的坐标。
使用一个公式来计算最短距离:(例如:http://www.movable-type.co.uk/scripts/latlong.html)
你可以使用经度和纬度。
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进口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的替代品)
编辑:链接添加由于意见讨论
你介意解释你的Excel公式背后的逻辑吗?我没有看到它与Chip Pearson的网站上的公式匹配。此外,这假设一个球形的地球,而不是一个更现实的椭球体,但我想这对这个应用来说是完美的,因为不确定性将比邮政编码的大小小得多......除了在大型,紧凑的城市,邮政编码区域可能非常小。也许我太肛门了。 –
@ Jean-Francois Corbett Excels需要转换为Radians(我将在我的答案中提供另一个链接)。我并没有打算把它分解,而是在我写作时不会像你一样思考。但你确实说得很好。我想这取决于他会如何确切地想要它。这就是为什么我把他与另一种选择联系起来。 – sealz
你看着谷歌地图API? –
@Amir Raminfar-当我上次查看Google maps api时,限制是任何检索到的信息必须显示在地图上以满足显示要求。我不想在地图上显示。 – MAW74656