我在 SQL Server 2008 中找不到任何可以完成此任务的函数,但我对 SQL Server 2008 sql 函数也比较陌生。
在处理 SQL Server 2008 时,我通常会查看 PostGIS 论坛和电子邮件列表,看看它是如何完成的(PostgreSQL-PostGIS 已经在这方面的时间更长了)。有人似乎有与此相反的问题,这似乎是您所追求的结果。
不幸的是,没有 ST_LineMerge(或 STLineMerge),所以你可能需要自己动手。
我不确定这些示例是否适用于所有情况(并且线串本身不是按顺序排列的):
select geometry::STGeomFromText(Replace(@g2.STSymDifference(@g1).ToString(),'))','),' + Replace(@g1.STIntersection(@g2).ToString(),'LINESTRING','') + ')'), @g1.STSrid).STAsText()
这是与实际线串数据相同的逻辑:
DECLARE @g1 geometry;
DECLARE @g2 geometry;
DECLARE @g3 geometry;
SET @g1 = geometry::STGeomFromText('LINESTRING(0 0, 0 20)', 0);
SET @g2 = geometry::STGeomFromText('LINESTRING(0 5, 0 10)', 0);
SELECT @g1.STIntersection(@g2).ToString();
SELECT @g1.STIntersection(@g2).STAsText();
SELECT @g2.STSymDifference(@g1).ToString();
select @g1.STIntersection(@g2).ToString();
SET @g3 = geometry::STGeomFromText(Replace(@g2.STSymDifference(@g1).ToString(),'))','),' + Replace(@g1.STIntersection(@g2).ToString(),'LINESTRING','') + ')'), @g1.STSrid);
select @g3.STAsText();