我有一個地址電子表格,我需要計算所有郵政編碼和我的郵政編碼之間的距離。我對所使用的方法非常靈活,但我希望有某種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