SQL中

时间:2015-08-20 18:49:36

标签: mysql spatial spatial-query

我正在尝试在SQL中连接两个空间表。

一张表的点信息如下 - (点位表)

enter image description here

另一个表格的行信息如下 - (行表格)

enter image description here

我想要做的是匹配点表中的点到线上表行(基于点和线的交点)并连接两个表以获得对应于每个station_id的hwy_link_id / hwycov_id。

我对SQL中的空间数据非常陌生,如果有人可以建议我这样做,我真的很感激。

非常感谢。

1 个答案:

答案 0 :(得分:1)

在SQL Server中,您可以使用地理/几何类型' STIntersects方法作为连接的一部分。假设您也可以在MySQL中执行此操作(我不使用MySQL,因此无法测试),查询将如下所示:

SELECT
points.station_id,
lines.hwy_link_id,
lines.hwycov_id
FROM
points
LEFT JOIN
lines ON (STIntersects(points.Shape, lines.Shape) = 1);

尽管如此,除非您的数据超精确,否则线条和点可能不会相互交叉。因此,建议在点或线周围添加一个小缓冲区,以使交点有一小段距离可以使用(适应坐标值类型舍入等)。

因此查询将改为:

SELECT
points.station_id,
lines.hwy_link_id,
lines.hwycov_id
FROM
points
LEFT JOIN
lines ON (ST_Intersects(ST_Buffer(points.Shape, 10), lines.Shape) = 1);

我不确定MySQL设备的地理位置/几何形状,但我希望它们是米。

参考文献:

ST_Intersects:https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html#function_st-intersects

ST_Buffer:https://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html#function_st-buffer