计算 rails 项目中 2 个纬度和经度位置之间的距离
Calculating the distance between 2 latitude and longitude locations in a rails project
我正在使用
geokit-rails
gem 计算包含纬度和经度字段的 2 个对象之间的距离: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
然后我在我的 Leg 对象中调用这条线,以获得起点和终点之间的距离。起点和终点记录都存在 - 在数据库中具有有效的纬度和经度值。
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。
我是不是用错了?有人可以帮忙吗?
您在日志中看到您的 puts "distance in leg is:"+distance.to_s
行了吗?
如果不是,则错误归结为 if(origin.present? && destination.present?)
返回 false。
这完全是用户错误。我在这个问题中发布的代码实际上是完全正确的。
由于模型和控制器中的几个潜在问题,纬度和经度列中的值没有被持久化。
全部修复:)
我正在使用
geokit-rails
gem 计算包含纬度和经度字段的 2 个对象之间的距离: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
然后我在我的 Leg 对象中调用这条线,以获得起点和终点之间的距离。起点和终点记录都存在 - 在数据库中具有有效的纬度和经度值。
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。
我是不是用错了?有人可以帮忙吗?
您在日志中看到您的 puts "distance in leg is:"+distance.to_s
行了吗?
如果不是,则错误归结为 if(origin.present? && destination.present?)
返回 false。
这完全是用户错误。我在这个问题中发布的代码实际上是完全正确的。
由于模型和控制器中的几个潜在问题,纬度和经度列中的值没有被持久化。
全部修复:)