Ruby 地理编码器';s'distance'u to'计算结果与'distance'u to'计算结果不同?
我正在使用Ruby(1.1.6),看到了我不理解的行为。下面的测试失败说明了这一点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)
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。