2010-11-20 1 views
1

私はRails 3アプリケーションを持っており、サポートするためにいくつかのユースケースがあります。Rails 3の "Store Locator"機能のためのMySQLの空間的な能力やlat-long検索を使用しますか?

  • 住所または郵便番号を指定してください。

  • ユーザーがどこから由来しているかをグラフィカルに表示します。

最初は「購入先」タイプの機能の速度と精度が必要です。

2番目のものでは、IPサービスが返すものであれば十分ですが、正確なデータは必要ありません。私は基本的にそれに固執したピンの束とGoogleの地図を置くしたい。

私は今この経験がゼロです。私はJavascriptを書いてうれしく、ジオコーディングを実行するためにGeoKitをインストールしました(私が綴ることができる単語ですが、私はまだ分かりません)。私はあなたが提供できるどんな助けにも感謝します。

私は、MySQLには空間的な拡張機能があり、アップデートは本当にシンプルであるように見えます。たぶん、これは店舗の場所を格納するために空間情報を使用し、次にIPアドレスからユーザーの場所を取得するという分割された決定です。

サイトの使用例については、ログファイルをライブスキャンしたり、データベースにヒットを保存したりする方が理にかなっていますか?

+0

は、どのくらいの速あなたはそれをする必要があります:ここで私が使用したクエリ({} LAT交換し、あなたの緯度と長い値を持つ{LNGは})ですか?また、1日に何件の検索を処理できるようにしたいのですか? – Coomer

+0

1〜2秒の最大返送時間、1日あたり最大25,000件の検索。間違いなく多くから始めるべきではありません。 – AKWF

答えて

3

ジオコーディングでは、住所や郵便番号のようなものを緯度/経度座標に変換しています。

私はGoogle's Geocoding APIを使用していますが、Google Maps API Premierユーザーでない限りリクエスト数の上限は2,500です。これは非常に高速です(私のRailsアプリケーションが要求するほとんどすべての要求は0.1秒未満です)。正確です。ジオコーディングの詳細については、こちらをご覧ください。

私は幾分高価なクエリですが、私の合理的に小さなテーブル(緯度が約10,000のオブジェクト)よりも非常に速く(やはり0.1秒以下で)実行されているジオコーディングから返されたlat//長い値)。ケース1の場合

SELECT 
whatever, 3963.191 * ACOS((SIN(RADIANS({LAT}))*SIN(RADIANS(lat))) +(COS(RADIANS({LAT}))*cos(RADIANS(lat))*COS(RADIANS(lng)-RADIANS({LNG})))) AS distance 
FROM things 
HAVING distance < 30 
ORDER BY distance; 
+0

OK、MySQL空間拡張の代わりにlat/lngを使用します。 3963.191は地球の湾曲を処理します。ありがとう! – AKWF

関連する問題