Ruby 地理编码器';s'distance'u to'计算结果与'distance'u to'计算结果不同?

Ruby 地理编码器';s'distance'u to'计算结果与'distance'u to'计算结果不同?,ruby,geocoding,Ruby,Geocoding,我正在使用Ruby(1.1.6),看到了我不理解的行为。下面的测试失败说明了这一点 it "calculates distance consistently" do one = FactoryGirl.create(:point, latitude: 1.0, longitude: 1.0) two = FactoryGirl.create(:point, latitude: 2.0, longitude: 2.0) expect( one.distance_to(two)

我正在使用Ruby(1.1.6),看到了我不理解的行为。下面的测试失败说明了这一点

it "calculates distance consistently" do
  one = FactoryGirl.create(:point, latitude: 1.0, longitude: 1.0)
  two = FactoryGirl.create(:point, latitude: 2.0, longitude: 2.0)

  expect(
    one.distance_to(two)
  ).to eq(
    Geocoder::Calculations.distance_between(
      [one.latitude, one.longitude], [two.latitude, two.longitude]
    )
  )
end
这导致:

 Failure/Error: expect(
   expected: 97.69535411821234
        got: 157.22543203807288
   (compared using ==)
我看到
object.distance\u to(other)
应该是一个“位置感知查询”,但在我的测试日志中,我只看到用于创建的SQL插入,没有
选择
来获取距离。(我正在使用PostgreSQL。)

我在这里的期望值是否不正确?

必须指定单位 一点代码探索澄清了这一点。调用
Geocoder::Calculations.distance_-between
时,我需要添加
{units::km}
,因为这就是模型所使用的

我是通过以下方式得出这一结论的:

  • 调用
    point.method(:距离到)。源位置
  • 看到这一点
  • 注意,它调用了相同的方法,但添加了
    units
    选项

太好了,你可以自己找到答案。但是阅读问题和答案,我不理解地理编码者的退步或默认设置。当您不提供单位时,为什么在
距离u至
中使用地理编码器里程作为
单位
,而在
距离u至
中使用公里。这似乎很奇怪。与代码中的某些配置有关吗?也许你想在回答中解释一下,这可能会对本页的后续访问者有所帮助。@spickermann如我所说,“我需要添加{unit::km}……因为这就是模型所使用的。”该模型被配置为使用km,因此
distance\u to
used km。