2011-07-28 28 views
2

我一直在使用GeoKit for Rails,它的效果很好。但是,我注意到,當拉大量的列表時,它加載非常緩慢。geokit - 在導軌中使用原始的經緯度

我不知道是否是因爲它返回結果之前查詢谷歌或一些外部源。如果是這樣的話,有沒有辦法使用原始緯度座標(我有)來簡單地計算內部距離?

還是一個簡單的紅寶石公式,會爲我做到這一點?

+0

你是什麼意思的「拉清單」嗎?你是否試圖在一定距離內找到模型的所有實例? – jimworm

+0

耶正是 – stewart715

回答

6

距離上:

Geokit寶石提供了一種方法來計算兩個點之間的距離:

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

搜索明智:

Geokit-軌(插件)具有產生SQL(爲MySQL,postgres的,和SQL服務器)的取景器來計算distan CES上,讓你找到在一定距離內的行:

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

它計算所有行的距離,但並不需要查詢的外部資源。如果您的表確實是巨大的它可以幫助(但我不能肯定它會)通過計算預緯度/經度範圍縮小範圍第一:

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

如果仍然不能幫助你將不得不編寫一些定製的SQL。對於geokit護欄的SQL距離計算的位置: https://github.com/andre/geokit-rails/tree/master/lib/geokit-rails/adapters

+0

謝謝 - 是否有任何其他的不太準確forumlas(較便宜的那是當然的,) – stewart715

+0

我很困惑 - 做什麼和OBJ1代表OBJ2,如果我已經在一個模型中調用它? – stewart715

+0

你在類上調用它(它是一個類方法),'obj1'和'obj2'是實例。 – jimworm

1

可以使用公式球體計算表面上的兩個點的距離。

下面是一些JavaScript實現用於計算緯度/經度之間(和其他一些有用的東西)的距離。應該不會太大大腦工作的翻譯紅寶石;-)

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