Geocoder的`distance_to`计算是否与'distance_between`不同?

时间:2014-05-02 20:13:25

标签: ruby geocoding

我使用Ruby geocoder gem(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_to(other)应该是一个"位置感知查询",但在我的测试日志中,我只看到了创建的SQL插入,没有SELECT到得到距离。 (我正在使用PostgreSQL。)

我的期望在某种程度上是不正确的吗?

1 个答案:

答案 0 :(得分:0)

必须指定单位

一点点代码探究澄清了这一点。我需要在调用{units: :km}时添加Geocoder::Calculations.distance_between,因为这就是模型正在使用的内容。

我认为这是:

  • 致电point.method(:distance_to).source_location
  • 看到指向here
  • 注意到它调用了相同的方法,但添加了units选项