我希望我在这里有足够的细节可以理解!
我已经创建了一个在列中包含几何线的表。该表使用以下输入填充:
INSERT INTO tblLines ("geomLines") VALUES (geometry::STGeomFromText('LINESTRING (10 15, 100 100, 120 79, 90 40, 80 5)', 0));
INSERT INTO tblLines ("geomLines") VALUES (geometry::STGeomFromText('LINESTRING (75 25, 50 150, 120 120, 135 40)', 0));
结果表tblLines如下:
fidID geomLines
1 wkt
2 wkt
然后我在动态行AB中创建了
SET @AB = geometry::STGeomFromText('LINESTRING (60 40, 100 140)', 0);
所以总结我所有的数据看起来像这样:
我现在可以使用:
DECLARE @AB GEOMETRY = geometry::STGeomFromText('LINESTRING (60 40, 100 140)', 0);
DECLARE @A GEOMETRY = geometry::STGeomFromText('POINT (60 40)', 0);
-- Combined multipoint value
DECLARE @ABINT GEOMETRY = (SELECT GEOMETRY::UnionAggregate(@AB.STIntersection(geomLines)) FROM tblLines WHERE @AB.STIntersects ( geomLines ) = 1);
SELECT *
FROM tblLines
WHERE @ABINT.STDistance(geomLines) < 0.01
ORDER BY @A.STDistance(@ABINT) ASC;
这会产生AB交叉线的相当不错的摘要,但是在两件事上确实失败了:
1-它没有显示“ 2”所期望的重复
2-@ A.STDistance(@ABINT)始终是从A到第一个多点的度量,而不是我希望的每个多点。
我希望能做到这一点:
[Intersected Line] [Distance along AB]
2 18
1 25
2 60
有人有什么提示吗?
答案 0 :(得分:0)
测试数据
CREATE TABLE #tblLines( geomLines GEOMETRY )
INSERT INTO #tblLines (geomLines) VALUES (geometry::STGeomFromText('LINESTRING (10 15, 100 100, 120 79, 90 40, 80 5)', 0));
INSERT INTO #tblLines (geomLines) VALUES (geometry::STGeomFromText('LINESTRING (75 25, 50 150, 120 120, 135 40)', 0));
解决方案
DECLARE @AB GEOMETRY = geometry::STGeomFromText('LINESTRING (60 40, 100 140)', 0);
-- Combined multipoint value
SELECT GEOMETRY::UnionAggregate(@AB.STIntersection(geomLines)) FROM #tblLines WHERE @AB.STIntersects ( geomLines ) = 1