2013-09-21 65 views
0

嗨即時通訊使用ruby Geokit :: LatLng類來存儲經緯度,並試圖找到幾點之間的中點。我注意到這個寶石的問題,或者我可能誤解了這些概念。Geokit LatLng兩點之間的中點

  a = Geokit::LatLng.new(13.0627081,80.274658) 
      b = Geokit::LatLng.new(12.8550615,80.2264393) 

當我計算的「midpoint_to」的方法來計算這些時候,我注意到,他們得到不同的結果

  a.midpoint_to(b) 
<Geokit::LatLng:0x0000000292f368 @lat=12.95888590853612, @lng=80.25053859693796> 

      b.midpoint_to(a) 
<Geokit::LatLng:0x00000002933f80 @lat=12.958885908536992, @lng=80.250538596> 

能解釋一些我這裏發生了什麼之間的中點。 之間中點至b應該相同 b到a或者它在緯度和經度

回答

3

在您的例子,這兩個點是一樣的,非常接近。

a.midpoint_to(b) 
<Geokit::LatLng:0x0000000292f368 @lat=12.95888590853612, @lng=80.25053859693796> 

b.midpoint_to(a) 
<Geokit::LatLng:0x00000002933f80 @lat=12.958885908536992, @lng=80.250538596> 
  • 第一個數字,0x0000000292f3680x00000002933f80是對象標識(目前尚不清楚是否已經知道了):爲什麼你沒有得到相同的對象,即 - 這是值得識別的差異。它們在任何新對象實例中都會有所不同,並且不會測量與距離或位置有關的任何內容。還有一些其他類沒有顯示這個數字,或者當答案是相同的時候是相同的。

  • @lat@lng之間的差異是由於浮點精度的限制。結果不一樣,因爲獲得中點的計算不會以完全相同的方式使用兩組輸入數字。實際上,即使浮點數的計算非常簡單,a + (b - c)也可能與(a + b) - c不一樣。當您查看兩個計算中點之間的經度差異時,它是9.379590437674779e-10度。在地球表面上,這個距離大約爲0.0001米(0.1毫米),而你的輸入點距離大約爲14.7千米。

如果您使用geokit測量距離,你就會得到一個令人放心的0.0,你也許可以用它來確認兩次計算是足夠接近算作完全相同點:

a = Geokit::LatLng.new(13.0627081,80.274658) 
b = Geokit::LatLng.new(12.8550615,80.2264393) 
m1 = a.midpoint_to(b) 
m2 = b.midpoint_to(a) 
if m1.distance_to(m2) > 0 
    puts "Mid-points are separate" 
else 
    puts "Mid-points are the same location" 
end 

輸出是:

Mid-points are the same location 

如果你做更復雜的計算,你可能更願意使用數量大於0.0略高,例如1E-5(以最近釐米)。

1

中點之間不同至b反之亦然將是相同的。

中點可能不位於緯度/經度中間;

緯度經度 22.57265 88.36389

點b

緯度經度 27.66483 -81.51575

a.midpoint_to(b) 
=> #<Geokit::LatLng:0xb9219f44 @lat=79.06104152033897, @lng=16.672528167825877 

這個頁面展示如何計算geographic midpoint

This post mightbe有用理解公式