私は GeoKit for Rails を使用してきましたが、うまく機能します。ただし、大量のリストを取得すると、読み込みが非常に遅いことに気付きました。
結果を返す前に、Googleまたは外部ソースにクエリを実行しているためかどうか疑問に思っています。その場合、生の緯度経度座標 (私が持っている) を使用して内部的に距離を単純に計算する方法はありますか?
または、私のためにこれを行う単純なルビー式ですか?
私は GeoKit for Rails を使用してきましたが、うまく機能します。ただし、大量のリストを取得すると、読み込みが非常に遅いことに気付きました。
結果を返す前に、Googleまたは外部ソースにクエリを実行しているためかどうか疑問に思っています。その場合、生の緯度経度座標 (私が持っている) を使用して内部的に距離を単純に計算する方法はありますか?
または、私のためにこれを行う単純なルビー式ですか?
距離的に:
Geokit-gemは、2点間の距離を計算する方法を提供します。
# 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
球の式を使用して、サーフェス上の 2 点の距離を計算できます。
これは、緯度/経度 (およびその他の便利なもの) 間の距離を計算するための JavaScript 実装です。ruby に変換するのに頭を悩ませすぎてはいけません ;-)