计算导轨项目中2个纬度和经度位置之间的距离

时间:2017-06-14 04:26:41

标签: ruby-on-rails ruby google-maps geocoding geokit

我正在使用

  

geokit-轨

gem计算包含纬度和经度字段的2个对象之间的距离:https://github.com/geokit/geokit-rails

我有一个Leg对象 - 它包含1个Origin对象和1个Destination对象。

Origin看起来像这样:

class Origin < ApplicationRecord
  belongs_to :leg

  validates :name, presence: true
  validates :longitude, presence: true
  validates :latitude, presence: true
  validates :type, presence: true

  acts_as_mappable :default_units => :miles,
                   :default_formula => :sphere,
                   :distance_field_name => :distance,
                   :lat_column_name => :latitude,
                   :lng_column_name => :longitude

end

目标模型如下所示:

class Destination < ApplicationRecord
  belongs_to :leg

  validates :name, presence: true
  validates :longitude, presence: true
  validates :latitude, presence: true
  validates :type, presence: true

  acts_as_mappable :default_units => :miles,
                   :default_formula => :sphere,
                   :distance_field_name => :distance,
                   :lat_column_name => :latitude,
                   :lng_column_name => :longitude
end

然后我在Leg对象中调用此行,以获得原点和目标之间的距离。原始记录和目标记录都存在 - 在DB中具有有效的纬度和经度值。

def distance
    if(origin.present? && destination.present?)
        distance = origin.distance_from(destination, :units=>:miles)
        puts "distance in leg is:"+distance.to_s
        return distance
    else
        return 0
    end
  end

尽管使用了纬度和经度列中具有适当值的有效原点/目标对象,但返回的距离始终为0.0。

我使用这个错了吗?有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您是否在日志中看到了puts "distance in leg is:"+distance.to_s行?

如果没有,则错误降至if(origin.present? && destination.present?),返回false。

答案 1 :(得分:0)

这是完整的用户错误。我在这个问题中发布的代码实际上是完全正确的。

由于模型和控制器中的几个基本问​​题,纬度和经度列中的值未被保留。

全部修复:)