SQL 线串与其他线串相交的空间次数

SQL Spatial number of times a Linestring intersects other Linestrings

所以,我有一个名为 "lines" 的 table,它有一个名为 "WKT" 的字段和相应的地理位置。

我构建了一个查询,为我提供相交线的名称,如下所示:

DECLARE @DF GEOGRAPHY  
Set @DF=GEOGRAPHY::STLineFromText('LINESTRING(-9.564498 52.237100,-9.564906 52.243924,-9.565699 52.245563,-9.568173 52.251014,-9.567142 52.257567,-9.564291 52.262366,-9.563453 52.262972,-9.563447 52.262980,-9.563447 52.262980,-9.563447 52.262980)', 4326)  
select name, @DF.STIntersects(WKT) AS inters
from lines WHERE @DF.STIntersects(WKT)=1

而且效果很好。有问题的情况是当此 @DF 行是 "go and return by the same path" 时。在这种情况下,我想知道相交的重复线的名称。

这可以吗?

当然可以。假设您有一个计数 table(即一个 table,其中数字 1 到某个大数):

DECLARE @DF GEOGRAPHY  
Set @DF=GEOGRAPHY::STLineFromText('LINESTRING(-9.564498 52.237100,-9.564906 52.243924,-9.565699 52.245563,-9.568173 52.251014,-9.567142 52.257567,-9.564291 52.262366,-9.563453 52.262972,-9.563447 52.262980,-9.563447 52.262980,-9.563447 52.262980)', 4326)  

WITH cte AS (
    SELECT n, @DF.STCurveN(n) AS curve
    FROM dbo.Numbers
    WHERE n <= @DF.STNumCurves()
)
select name, @DF.STIntersects(WKT) AS inters
from lines AS l
JOIN cte AS c
    ON l.WKT.STIntersects(c.curve) = 1

我敢肯定,您可以在不使用 CTE 的情况下逃脱,但那是我脑海中最有意义的事情。