【问题标题】:Spatial Intersection of Point with lines in SQLSQL中点与线的空间交点
【发布时间】:2015-09-09 07:38:39
【问题描述】:

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

一个表的点信息如下 - (点表)

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

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

我对 SQL 中的空间数据非常陌生,如果有人能给我建议一种方法,我将不胜感激。

非常感谢。

【问题讨论】:

  • 以下答案对您有任何帮助吗?
  • 不幸的是,我用来执行所有这些操作的数据库连接存在一些访问问题,这就是为什么尚未测试您的建议的原因。我正在等待,一旦我测试它并且它有效,我会正式感谢你:)
  • 没问题。我更担心我在没有使用经验的情况下尝试 MySQL 查询! :-)

标签: mysql spatial spatial-query


【解决方案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);

也就是说,除非您的数据非常精确,否则线和点可能不会在您期望的时候相交。因此,建议在点或线周围添加一个小缓冲区,以使 Intersection 有一个小的距离来玩(适应坐标值类型的舍入等)。

因此,查询将更改为:

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

【讨论】:

  • 我尝试了您的建议,但进行了修改以尝试使其在 MySQL 上运行。以下是我尝试过的。查询成功运行,但没有返回任何内容。 SELECT *FROM points.stations, lines.hwy_linkWHERE station.shape.STIntersects(hwy_link.shape) = 1有什么建议吗?
  • @ashishkul 我不知道 MySQL 的复杂性,但你在哪里加入该声明?它是由表之间的 , 推断的吗??
  • 我看到了一个例子,其中 STIntersects 以类似的方式使用。我猜 FROM table1, table 2 隐含地加入了两者。正如我所提到的,查询成功运行(没有返回任何行),我看到结果窗口中的标题包含来自两个表的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
相关资源
最近更新 更多