2012-03-08 183 views
2

我有一个mySQL空间函数的问题。我的目标是找出一个LINESTRING对象是否通过一个POLYGON对象。为了确定我试图用两个LINESTRING对象来确定它们是否交叉。MySQL LineString与Linestring或Polygon的交集

SET @ls='LINESTRING (0 0, 1 1, 2 2, 3 3)'; -- original linestring 
SET @lp='LINESTRING (0 1, 1 2, 2 3, 3 4)'; -- parallel linestring 
SET @lx='LINESTRING (0 3, 1 2, 2 1, 3 0)'; -- crossed linestring 

我已经试过多种功能,达到我的目标:

SELECT crosses(GeomFromText(@ls), GeomFromText(@lx)); -- crossing linestrings 
returns 0; 

SELECT intersects(GeomFromText(@ls), GeomFromText(@lp)); -- parallel linestrings 
returns 1; 

SELECT overlaps(GeomFromText(@ls), GeomFromText(@lp)); -- parallel linestrings 
returns 1; 

我明白,这是边界比较或某事的问题,但有一个方法(或函数,或简单解决方案)如何实现我的目标?其他的可能性是检查LINESTRING中的POINT是否在POLYGON中,但我想知道是否有另一种方法来做到这一点?在MySQL Great Circle intersection (do two roads cross?)提供

解决方案不帮我很遗憾..

回答

2

从MySQL的文档'Functions That Test Spatial Relationships Between Geometries'在5.6.1:

MySQL的最初实现了这些功能,他们使用的对象边界矩形,并返回与相应的基于MBR的函数相同的结果。从MySQL 5.6.1开始,提供了使用精确对象形状的相应版本。这些版本以ST_前缀命名。例如,Contains()使用对象边界矩形,而ST_Contains()使用对象形状。

从MySQL 5.6.1开始,现有的空间函数还有ST_别名,这些已经是精确的。例如,ST_IsEmpty()是为IsEmpty()的别名

intersects功能,例如,因为两个形状的最小边界矩形(MBR)做相交返回true。如果您使用ST_Intersects(假设您有MySQL 5.6.1或更高版本),那么它将按预期返回false。这些函数可以用于点,线和多边形 - 所以应该解决你的'线相交多边形'查询也(ST_Crosses也存在,如果需要的话)。

+0

是的,幸运的是,新版本支持ST_前缀。我已经修好了一段时间,但忘记了这里的线程。 :) 感谢您的答复。 – Tiit 2013-06-17 08:46:44

相关问题