geokit - 在rails中使用raw lat lng

时间:2011-07-28 13:41:01

标签: ruby-on-rails ruby ruby-on-rails-3 geolocation geokit

我一直在使用GeoKit for Rails,效果很好。但是,我注意到在拉大量列表时,加载速度非常慢。

我想知道是否是因为它在返回结果之前查询谷歌或某些外部来源。如果是这种情况,有没有办法使用原始lat lng坐标(我有)简单地在内部计算距离?

或者是一个简单的红宝石配方,会为我做这件事吗?

2 个答案:

答案 0 :(得分:6)

距离上:

Geokit-gem提供了一种计算两点之间距离的方法:

# model has acts_as_mappable
Model.distance_between obj1, obj2, :units => :kms, :formula => :sphere

搜索明智:

Geokit-rails(一个插件)有一个查找程序,可以生成SQL(用于mysql,postgres和SQL服务器)来计算距离,让你找到一定距离内的行:

Model.find_within(100, :units => :kms)

它计算所有行的距离,但不需要查询外部资源。如果你的表真的很大,它可能有帮助(但我不太确定它会通过预先计算lat / lng范围来缩小它:

Model.where(:lat => (x-0.05)..(x+0.05), :lng => (y-0.05)..(y+0.05)).find_within(z, :units => :kms)

如果仍然没有帮助,你将不得不写一些自定义的SQL。 geokit-rails的sql距离计算如下: https://github.com/andre/geokit-rails/tree/master/lib/geokit-rails/adapters

答案 1 :(得分:1)

您可以使用球体公式计算表面上两点的距离。

这是一些用于计算纬度/经度之间距离的JavaScript实现(以及其他一些有用的东西)。不应该过多的大脑工作来转化为红宝石; - )

http://www.movable-type.co.uk/scripts/latlong.html