2

mysqlの空間データ型についてはかなりの量の質問がありますが、私のものはRailsMVCアーキテクチャー内でそれらをどのように処理する のが最善かについてより具体的です。

管理者ユーザーが新しい興味のあるポイント、たとえばレストランを作成し、いくつかの情報を入力できる入力フォームがあります。また、人間が読める緯度と経度を10進形式で入力することもできます。

ただし、距離計算などの場合は、位置データを空間ポイントとしてデータベースに保存しています。

したがって、私の質問は、RailsのMVCアーキテクチャでこれをどのように最適に処理するかです。

これが私が持っていたいくつかのアイデアですが、本当にきれいに見えるものは何もありません:

  • オブジェクトの新しいインスタンスを取得し、「GeomFromText('POINT(lat long)'))」の良さを処理する生のSQL更新を実行する:after_filterメソッドを呼び出します。これに関する問題は、「lat / long」が私の作成フォームのテキストフィールドになることですが、これは、lat / longは実際には属性ではないため、railsが提供するクリーンなform_for:objectアーキテクチャを混乱させますが、 mysql空間ではない人間の入力値。

  • たぶん、その行を更新する行挿入の後に実行するトリガーをデータベースに作成しますか?緯度/経度と空間ポイントを保存し、緯度/経度の小数を使用してデータベースに行を作成しない限り、これらのトリガーが緯度/経度にアクセスできるとは思えません。 、作成後にトリガーを実行して、空間を更新しました。モデルにlat/long列を追加した場合は、after_filterを使用してそれを行うこともできると思います。

他のアイデアはありますか?距離の計算などに実際に空間ポイントを使用するので、緯度/経度の保存は冗長だと思います...しかし、人間による編集を許可する場合は必要になる可能性があります。

4

2 に答える 2

3

Rails用のgeokit-railsプラグインをチェックしてください。これは、プレーンなlat / lng列をフロートとして使用して距離計算を行います(そしてgeokit gemを使用します)。ただし、データベースの地理空間機能を使用する場合、GeoRubyはPointやLineStringなどの基本的な空間機能を列タイプとしてサポートします。これらの助けを願っています。

于 2009-07-21T20:52:51.083 に答える
0

私は絶望的に同意します、geokitは素晴らしいです、私もそれを使います。

自分でやりたい場合は、after_filterを実行しますが、updateメソッドをスレッドに外部化します。そのように、保存中に速度が低下することはありませんが、それでも優れたコードとタイムリーに更新された列があります。

トリガーは適切ではありません。データベースはデータを配信する必要がありますが、ロジックは実行しません。

于 2009-07-21T21:00:39.367 に答える