問題タブ [geokit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
586 参照

ruby-on-rails - GeoKitを私の住所クラスとうまく連携させる

Addressのクラスにはgeocode、メソッドのパラメーターのジオコーディングから派生した住所オブジェクトの配列を返すクラスメソッドがあります(ジオコーディングの結果が完全に一致する場合、配列には1つの要素が含まれます)。

このメソッドを作成する際の厄介な部分の1つは、GeoKitアドレスオブジェクトを私のアドレスオブジェクトに変換することです(たとえば、「street_address」->「address1」)。これを行うためのより良い方法はありますか?

0 投票する
3 に答える
3106 参照

ruby-on-rails - GeokitとAuthlogic、ユーザーを作成するときにユーザーのIPアドレスをジオコーディングする

誰かがこれをしましたか?私はこれをどのように機能させることができるか混乱しています、最初に私は私のユーザーモデルを持っています

それを使用したジオコーディングはIRBで正常に機能しますが、プロジェクトで機能させる方法がわかりません。

ここでreadmeのいくつかの例を使用しようとしています:http://github.com/andre/geokit-rails/tree/master

とにかくここに私が持っているものがあります:

これは私の保存アクションに対応していますuserController。authlogicはユーザーまたはセッションの保存後にIPを提供するため、保存後にこれを行う必要があります。最終的にはバックグラウンドプロセスにするつもりですが、それまではどうすればこれを機能させることができますか?ユーザーモデルに場所の列があり、その結果を保存しますgeocode()

また、今は任意のIPアドレス「12.12.12.12」を持っていますが、実際には current_login_ip

0 投票する
2 に答える
643 参照

ruby - さまざまな精度の緯度と経度を使用した浮動小数点計算

背景: Web サービスへのパラメーターとして経度と緯度を受け取ります。通常、小数点以下 6 桁までです。新しいリクエストが受信されると、最後に記録された場所とリクエストのパラメーターの経度/緯度の間の距離を計算します。距離が特定のしきい値のマイルよりも大きい場合は、現在の場所を更新します。

問題: geokit gem/plugin を使用して、locs 間の距離を計算します。ごくまれに、距離計算が非常に不正確な何かを返す原因となるバグ (著者のサイトで言及されているゼロ距離バグ - バグが修正されたと主張する 1.4.1 を使用していますが、まだ発生していることがわかります)が表示されます。同一の 2 点間の距離を計算する場合 (これは、ユーザーが動いていない場合に発生します)。これにより、発生してはならないユーザーの現在の場所への更新が発生しています。あなたはおそらく疑問に思っているでしょう - 正確に同じ座標になるように loc を更新するだけなら、誰が気にしますか? まあ、答えは、loc が更新されると、実際の問題になる他の多くのがらくたが発生するということです。

試みられた解決策:距離を計算する前に2つの位置が同一であるかどうかを手動でチェックするロジックを追加しようとしました。その後、計算をスキップして、そうであれば更新しません。入力パラメーターは、小数点以下 6 桁の精度の long/lats です。一方、私のデータベースでは、値を float として保存しています。これは、小数点以下 4 桁しか保存していないように見えます。これにより、float 比較が常に失敗し、不適切な loc 更新が引き続き発生します。

さて、実際の質問は次のとおりです。この比較をどのように実行すればよいですか? 受信した緯度/経度から小数点以下 2 桁を切り捨て、4 桁目が正しくなるように切り上げてから比較する必要がありますか? または、「特定の範囲内」で比較する必要がありますか (たとえば、reported_loc.long > current_loc.long - .0001 &&reported_loc.long < current_loc.long + .0001)? また、この種のことを行うための既存の ruby​​ gem/プラグインまたは組み込み関数に関する推奨事項も大歓迎です。

ログからの出力例を次に示します。

ありがとうございました

トム

0 投票する
1 に答える
759 参照

mysql - mysql は私のインデックスを使用しているかどうか、および geokit のパフォーマンスを改善できますか?

Rails アプリケーションで geokit (acts_as_mappable) を使用していますが、多数のモデルがある場合、ラジアル検索または境界検索のパフォーマンスが大幅に低下します (私は 100 万から 200 万で試しましたが、問題は間違いなくこれよりも早く発生します) )。

Geokit は、テーブルの緯度と経度の列 (緯度と経度) に基づいてすべての計算を行います。パフォーマンスを向上させるために、ジオキットは通常、境界ボックスの「where」句を追加します。これは、パフォーマンスを向上させるために緯度と経度の組み合わせインデックスを使用することを目的としています。ただし、多数のモデルでは依然として非常に低速であり、バウンディング ボックス句はそれよりもはるかに役立つはずです。

私の質問は、mysql で lat/lng インデックスをより有効に活用したり、gekit sql クエリのパフォーマンスを向上させたりする方法はありますか? または、緯度/経度の複合インデックスをより役立つものにすることはできますか?

編集:私はこれをレールで動作させ、ソリューションをより詳細にここに書きました

その他の背景

たとえば、次のクエリは、特定の地点から 10 マイル以内にあるすべての場所を検索します。(返される結果の数を判断するためだけに .length を追加しました。これを geokit で表現するより適切な方法がありますが、より典型的な SQL クエリを強制したかったのです)。

Mac mini で約 14 秒かかります。説明プランはこちら

したがって、結果の桁数が 1135 であっても、mysql は 87554 行を調べています (境界ボックス内の実際の桁数はちょうど 1323 です)。

これらは、インデックスの統計です(これは、レール移行add_index :places, [:lat, :lng] で作成されます):

境界ボックスに対して同様のクエリを実行すると、はるかに単純なクエリになりますが、同様にパフォーマンスが低下するため、三角関数の計算にも関連していないようです。

同様の説明計画を提供します。

0 投票する
1 に答える
983 参照

ruby-on-rails - Postgresql が Geokit でこのように失敗するのはなぜですか?

私が構築しているアプリの Rails で geokit を使い始めたところです。レコードをジオコーディングしましたが、コンソールに移動して何ができるかを確認すると、次のように爆発しました: user is a user object with lat and lng from my database

これを解決する方法はありますか?残念ながら、エラーメッセージを検索しようとしたとき、Googleはあまり役に立ちませんでした...

0 投票する
1 に答える
937 参照

sql - 複雑な結合に関する Rails ActiveRecord の問題 - 選択が機能しない

2 つのモデル オブジェクトがあります。

  • イベント
  • 会場

イベントには会場があります。会場には 1..* イベントを含めることができます。

会場には場所、緯度と経度があり、私はこれを Geokit Rails プラグインで使用しています。これらのモデルは Rails では次のようになります。

とても簡単です!ここで、クエリを実行したいと思います。特定の地域から数マイル以内にあるすべてのイベントを検索したいと考えています。Geokit API を調べたところ、Event の :through 関連付けで mappable を使用できることがわかりました。イベントで geokit finder を呼び出すことができるはずです! すばらしい (上でわかるように、acts_as_mappable :through をイベントに追加しました)。

これが私のActiveRecordクエリです:

生成された SQL は次のとおりです。

ああ。さて、これは実行にかなりの時間がかかります。これは単なる計算ではありません。パフォーマンスに重大な問題があると思います。デスクトップで実行するのに 2 秒かかります。しかし、それに取り掛かると、ここに私の不満があります:

  • パフォーマンスを向上させるために、ActiveRecord の検索クエリで SELECT ステートメントを使用しようとしたことがわかります。他のすべてのフィールドではなく、一致するこれらのイベントのタイトルを知りたいだけです。しかし、クエリは通過し、Event からすべてを SELECT します! 「t1_r1」のように、私がよく知らない奇妙なエイリアスを使用しています。したがって、これは明らかに問題です。

さらに、このクエリは、Venues のみに対して実行される (つまり、JOIN を使用しない) 場合、10 ミリ秒未満で実行されます。この会場検索を最初に実行し、次にイベントに対して結合を実行する方法はありますか? 結合は 2 つのテーブル全体で行う必要があると思います。その後で初めて、ジオコーディング部分が入り、データセットがスリム化されます。

この問題を解決するための助けをいただければ幸いです (これは非営利プロジェクトです)。モデルは非常にシンプルだと思いますが、大騒ぎせずにこれを行うことができるはずですか?

前もって感謝します!

(編集: この投稿の初期のバージョンでは、私は愚かでした。Limit は問題なく機能し、ビューが壊れていたため、その部分を削除するように編集しました。)

0 投票する
2 に答える
4765 参照

ruby-on-rails - Ruby on Rails の Geokit、acts_as_mappable の問題

私は関連する質問のリストを調べましたが、私の問題はリストされていないようです。したがって、ここにあります:

基本的に、私は Ruby on Rails 環境内で Geokit を使用しようとしていますが、正しくインストールされているかどうかはわかりません。environment.rb 内に含めて (そして rake db:install を実行して)、現在実行しようとしています。続く:

残念ながら、これを実行して問題がないかどうかを確認しようとすると、次のエラーが表示されます。

私は Visual Studio 2008 の Steel で Ruby を実行しています。私が見つけたすべてのオンライン チュートリアルはかなり古く、私に適用される傾向があるため、何が間違っているのかわかりません。どんな助けでも大歓迎です。ありがとう!

編集: (Ben の要求に従って追加) 以下は、私の environment.rb の外観です。

0 投票する
1 に答える
963 参照

ruby-on-rails - Google マップに複数のマーカー (10 個以上のマーカーを表示できない) - Ruby on Rails 環境 YM4R プラグイン

次の問題があります。とにかく、Ruby on Rails内にGoogleマップ(YM4r + Geokitを使用)がありますが、基本的に、次の方法で入力されるマーカーの配列があります

10個未満のマーカーが問題なく表示されているため、それらは間違いなく問題なく保存されています. 問題は、同じページに 10 個を超えるマーカーがある場合に発生します。

これが役立つ場合は、表示に関連するその他のコード:

html.erb ファイルで:

マーカー配列の正しい量ではなく、10 個のマーカーのみが画面に表示されます。

誰かがこの問題に遭遇したことがありますか? 私はこれを克服する方法について本当に途方に暮れています

0 投票する
1 に答える
1038 参照

ruby-on-rails - Geokit エラー - 「初期化されていない定数」

インストール手順に従って、自分のサイトで Geokit を機能させました。距離の計算は問題なく実行できますが、次を使用して Google マップをレンダリングしようとすると、次のようになります。

次のエラーが表示されます。

理由を知っている人はいますか?APIキーか何かと関係があるような気がします。また、私は距離計算を完全に行うことができますが、マップ自体をレンダリングすることはできません.

0 投票する
7 に答える
6817 参照

ruby-on-rails - Ruby on Rails で request.remote_ip の値を変更

テスト目的で、request.remote_ip の戻り値を変更したいと考えています。私の開発マシンでは、常に 127.0.0.1 が返されますが、最初にライブサーバーにデプロイせずにアプリの正しい動作をテストするために、さまざまな偽の IP を自分に与えたいと考えています!

ありがとうございました。