2017-06-14 56 views
0

我现在用的是计算2点的经度和纬度位置之间的距离在Rails项目

geokit护栏

宝石来计算包含经度和纬度领域2个OBJETS之间的距离: https://github.com/geokit/geokit-rails

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

起源是这样的:

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 

然后我把这个线在我的腿对象,得到一个起点和终点之间的距离。原始和目的地记录都存在 - 在数据库中有有效的纬度和经度值。

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。

我使用这个错误吗?任何人都可以帮忙吗?

+0

这里有什么错误?你有什么问题? –

+0

Woops!加入 - 对不起! – RenegadeAndy

回答

0

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

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

全部修正:)

1

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

如果不是,那么错误将降至if(origin.present? && destination.present?)返回false。

+0

我在日志中看到了投入 - 它说'腿的距离是:0.0' – RenegadeAndy

+0

@RenegadeAndy你能调试起源和目的地的纬度和经度值是什么?我根本无法重新创建。 –

相关问题