sql - 计算直线与直线相交的距离
问题描述
我希望我在这里有足够的细节来说明问题!
我在列中创建了一个包含 Geom Lines 的表。该表是使用这些输入填充的:
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
有没有人有任何提示?
解决方案
测试数据
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
推荐阅读
- python - 使用 pandas 将 Mongodb 文档导出到 excel 或 csv
- python - 在 Python 中对列表中的新对象进行排序
- javascript - 赛普拉斯发送 XML 请求(SOAP API)
- java - 包含“null”拥有的对象的线程转储的Java死锁情况
- vb.net - 无法将文件上传到数据表并在gridview上显示(上传文件时没有任何反应)
- c# - 在 Xamarin 中将页面绑定上下文设置为不同的视图模型时如何将控件绑定到视图模型
- python - 如何将“下载”文件夹设置为 python pafy 下载的默认目录
- r - constrOptim:使用自适应障碍算法最小化受线性不等式约束的函数
- aws-api-gateway - AWS API 网关上的多个 cors 来源
- excel - VBA在范围内查找一个单词并复制以相同单词开头的所有单元格