0

我有多对由用户输入(php)计算的笛卡尔坐标(X,Y),它们形成一个范围(描绘一个多边形)。

从我的数据库(600 个点)中,我需要找到该范围内(多边形内)的任何点,并排除该范围外的任何点。

我想在一个 SQL 语句中完成这一切,但我似乎无法理解将同一行的两个不同值匹配到两个不同列的逻辑。

我想我在两个表之间拆分数据并使用内部连接?但这似乎有点过头了。

我曾尝试使用 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

ETC..

现在,您要选择 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 回答