0

ユーザー入力(php)によって計算されたデカルト座標(X、Y)の複数のペアがあり、範囲(ポリゴンの画像)を形成します。

私のデータベース (600 ポイント) から、その範囲内 (ポリゴン内) にあるポイントを見つけ、その範囲外にあるポイントを除外する必要があります。

すべてを 1 つの SQL ステートメントで実行したいと考えていますが、同じ行の 2 つの異なる値を 2 つの異なる列に一致させるロジックが理解できないようです。

2 つのテーブル間でデータを分割し、内部結合を使用すると思いますか? しかし、これは少しやり過ぎのようです。

MYSQL のジオメトリ部分で遊んでみましたが (「ポイント」データ型を使用して座標ペアを検索しようとしました)、インポートしたデータが表示されません (インポートが成功した後)。そして、行からすべてのデータを選択して $row["coords"] (ポイントデータである必要があります) を表示しようとすると、奇妙な ASCII 文字と四角形がたくさん表示されます...

したがって、通常の SQL を使用して簡単に実行できる方法があることを願っています。

4

1 に答える 1

1

次のようなテーブルがあるとします。

表1:

ID     |    INT
X_POS  |    INT
Y_POS  |    INT 

ID - 自動インクリメントされた主キー X_POS - ポイントの X 座標 Y_POS - ポイントの Y 座標

これで、次のようなサンプル データができました。

ID | X_POS | Y_POS
1  | 3.25  | 1.75
2  |-0.5   | 2.17

等..

ここで、ポイントが X 軸上で -1.34 から 1.28 の間、Y 軸上で -5.63 から 0.98 の間のすべての行を選択します。

クエリは次のようになります。

SELECT * FROM TABLE_1 
WHERE 
(X_POS BETWEEN -1.34 AND 1.28) AND
(Y_POS BETWEEN -5.63 AND 0.98)

このサンプルは、SQLFIDDLEでテストできます。

アップデート:

必ずMySQL Spatial Extensionを使用する必要があります

MYSQL のジオメトリ部分で遊んでみましたが (「ポイント」データ型を使用して座標ペアを検索しようとしました)、インポートしたデータが表示されません。

あなたのテーブル (SHOW CREATE TABLE) と、データをインポートするために使用した方法についての詳細を提供してください。

それなら私があなたを助けるかもしれません。

于 2012-07-17T04:09:09.597 に答える