2014-08-27 1051 views
0

我目前正在制定一個帶有兩個表格的模擬數據庫架構:BookingWaypoint使用經緯度座標計算多個點之間距離的Excel公式

  • 預定存儲出租車預訂信息。

enter image description here

  • 航點存儲該拾取和在行程中脫落點,與緯度經度位置沿。每個序列都是旅程中的一站。

enter image description here

我將如何計算每個旅程(使用經/緯度數據)在Excel中不同的站之間的距離?

有一種方法在Excel編程限定於此,即,使得一個公式可以被放置到mileage柱(Booking表),查找匹配序列(通過bookingId),選擇那些旅程在Waypoint表,並返回一個結果?

實施例1:

與2級間甲旅程:

1 1 1 MK4 4FL, 2, Levens Hall Drive, Westcroft, Milton Keynes 52.002529 -0.797623 
2 1 2 MK2 2RD, 55, Westfield Road, Bletchley, Milton Keynes 51.992571 -0.72753 

4.1英里根據谷歌,條目在mileageBooking表中進行,其中id = 1

實施例2:

3之旅停止:

6 3 1 MK7 7DT, 2, Spearmint Close, Walnut Tree, Milton Keynes 52.017486 -0.690113 
7 3 2 MK18 1JL, H S B C, Market Hill, Buckingham    52.000674 -0.987062 
8 3 1 MK17 0FE, 1, Maids Close, Mursley, Milton Keynes  52.040622 -0.759417 

27.7英里根據谷歌,條目mileage列在id = 3

+0

結帳:http://www.cpearson.com/Excel/latlong.aspx – 2014-08-27 18:06:00

+1

雖然很容易計算出地圖上的直線上的距離(「右旋距離」),而在大圓圈(「正向距離」)上並不困難,但計算合理精確的陸上里程需要更復雜的解決方案tions到表示路線的圖上的最小長度路徑問題 - 這又需要良好的路線數據庫。我建議使用現成的專用軟件來實現此功能,除非您並不真正在意精度。如果是這樣的話,讓我知道,我會找到公式...我有他們的地方... – jsalvata 2014-08-27 18:27:31

+0

@jsalvata謝謝你回到我身邊。準確性不是真正的問題:) – methuselah 2014-08-27 18:28:25

回答

1

直到最近,準確的地圖由三角構建Booking表,這在本質上是由畢達哥拉斯定理的應用。對於任意一對座標之間的距離,取x座標差的平方和y座標差的平方和的平方根。然而,x和y座標必須是相同的單位(例如英里),這涉及因子分解緯度和經度值。這可能會很複雜,因爲經度的因素取決於緯度(在北極行走比在赤道附近行走的距離要小),但在你的情況下,北部的因素應該是服務的。從這個結果(可能會檢查here)與您給出的示例(第二種情況,配對ID 6和7並將該結果添加到配對ID 7和8的結果)大約有20%不同。

1

既然你說的準確性並不重要,並且假設距離很小(比如說少於1000英里),那麼你可以使用洛克索距離。

爲此,計算結果(dlat)與經度差(dlon)的差值。如果您有可能(不太可能)穿越子午線180º,則以模數360º來確保經度差異在-180º和180º之間。還計算平均緯度(alat)。

然後計算:

distance= 60*sqrt(dlat^2 + (dlon*cos(alat))^2) 

這個距離是在海里。根據需要應用轉化。

說明:這樣做的好處是,根據定義,一海里總是等於緯度的一分鐘弧。餘弦對應於經脈在接近兩極時彼此接近的事實。其餘的只是畢達哥拉斯定理的應用 - 它要求地球的相關部分是平坦的,這對於小距離來說當然只是一個很好的近似值。

2

如果您想查找兩點之間的距離,只需使用此公式,您將得到以Km爲單位的結果,如果需要,則轉換爲英里。

點A:LAT1,LONG1 點B:LAT2,LONG2

ACOS(COS(RADIANS(90 LAT1))* RADIANS(90 LAT2))+ SIN COS((RADIANS(90 LAT1 ))* SIN(RADIANS(90 LAT2))* COS(RADIANS(long1-long2)))* 6371

問候

相關問題