2013-11-27 55 views
2

我正在使用Rubymotion開發iOS應用程序。在這個應用程序,我試圖計算行駛的距離。我使用下面的代碼,並在模擬器(高速公路驅動器)中返回好數字,但在我的汽車中試用它時,它有時會在中途停止計數。如何獲得驅動路線的距離?

BW::Location.get(distance_filter: 2, desired_accuracy: :best_for_navigation) do |result| 

if in_motion(result[:to].speed) 

    if result[:to].distanceFromLocation(result[:from]) < 40 

    @distance += result[:to].distanceFromLocation(result[:from]) 

    end 

end 

end 

我也嘗試了這個代碼,感覺有更少的東西可以出錯? 由於我使用的distance_filter是2,那麼我認爲每次獲得新的座標時我都可以遞增2。這個可以嗎?

BW::Location.get(distance_filter: 2, desired_accuracy: :best_for_navigation) do |result| 

if in_motion(result[:to].speed) 

    if result[:to].distanceFromLocation(result[:from]) < 40 

    @distance += 2 

    end 

end 

這兩種方法輸出到不同的數字。

+0

這兩種方法的不同數字對我來說似乎很清楚。在方法2中,您忽略了實際行進的距離。旅行的距離不應低於閾值,但可能會更大。 – railsdog

+0

好的,所以距離過濾器是一個最小值。任何想法爲什麼它永遠不會在模擬器和高速公路驅動器上失敗,但在設備上失敗? –

回答

1

實際上,有一個新的寶石,可以使這個輕鬆了許多:

https://github.com/willrax/motion-distance

你設置它像這樣:

@distance = Motion::Distance.new 
@distance.activity_type = CLActivityTypeAutomotiveNavigation #for driving 

然後調用「得到」獲得的距離旅行(以米爲單位)

@distance.get do |location| 
    puts location[:total] 
end