我正在尝试在SQL中连接两个空间表。
一张表的点信息如下 - (点位表)
另一个表格的行信息如下 - (行表格)
我想要做的是匹配点表中的点到线上表行(基于点和线的交点)并连接两个表以获得对应于每个station_id的hwy_link_id / hwycov_id。
我对SQL中的空间数据非常陌生,如果有人可以建议我这样做,我真的很感激。
非常感谢。
答案 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