オブジェクトの2つの属性に対応する2つのパラメータを指定すると、それらの2つの数値に最も近い20のレコードをデータベースで見つけることができます。レールアプリケーションで最も近い番号を検索
パラメータはx、yです。オブジェクトにはこれらの属性もあります。例えば。 x = 1、y = 9999です。xとyに最も近いレコードを見つける必要があります。
オブジェクトの2つの属性に対応する2つのパラメータを指定すると、それらの2つの数値に最も近い20のレコードをデータベースで見つけることができます。レールアプリケーションで最も近い番号を検索
パラメータはx、yです。オブジェクトにはこれらの属性もあります。例えば。 x = 1、y = 9999です。xとyに最も近いレコードを見つける必要があります。
2点間の距離の定義方法によって異なります。 2次元デカルト座標系を使用している場合、このSQLステートメントは動作します。
SELECT id, x, y FROM points ORDER BY SQRT(POWER((X-x),2)+POWER((Y-y),2)) ASC LIMIT 20;
ここで、X、Yは入力です。
ジオロケーションデータを使用しているようです。データベースのバックエンドがPostgresの場合は、PostGIS拡張機能があるかどうかを確認してください。これにより、「この点に最も近いものを検索する」、「このサークル内のすべてを検索する」、「この四角形内のすべてを検索する」などの検索を行う非常に高速なツールが提供されます。
http://postgis.refractions.net/
あなたはこのようなものだろう:
CREATE INDEX [indexname] ON [tablename] USING GIST ([geometrycolumn] gist_geometry_ops);
は、その後、あなたがこのような何かを行うことができます - ポイントの100メートル以内にすべてを見つける:the manualから
SELECT * FROM GEOTABLE WHERE
GEOM && GeometryFromText(’BOX3D(900 900,1100 1100)’,-1) AND
Distance(GeometryFromText(’POINT(1000 1000)’,-1),GEOM) < 100;
例。
+1これはまさに私が投稿しようとしていたものです。私はそれがデカルト座標系であると仮定していましたが、質問するのは良い質問です。 – jdl
yupのデータはx、yから来ています。デカルト: – s84
これをどのようにしてレール選択文にすることができますか? – s84