Sql server 2008 r2 SQL Server Spatial 2008 R2中直线上的最近点

Sql server 2008 r2 SQL Server Spatial 2008 R2中直线上的最近点,sql-server-2008-r2,geometry,spatial,spatial-query,Sql Server 2008 R2,Geometry,Spatial,Spatial Query,在理想情况下,我将在SQL Server 2012上运行,并能够使用.ShortestLineTo()函数查找直线上与另一点最近的点。我现在可以找到离我的点最近的直线,但是现在我需要找到离我的点最近的点的坐标 不幸的是,我被SQL Server 2008 R2卡住了,因此没有使用.ShortestLineTo()的选项 其他人如何在SQL Server空间几何体类型中实现这一点 干杯 Matt迟交答案,但如果它仍然有帮助(或对其他人来说),您应该能够使用SQL 2008执行以下操作 DECLAR

在理想情况下,我将在SQL Server 2012上运行,并能够使用.ShortestLineTo()函数查找直线上与另一点最近的点。我现在可以找到离我的点最近的直线,但是现在我需要找到离我的点最近的点的坐标

不幸的是,我被SQL Server 2008 R2卡住了,因此没有使用.ShortestLineTo()的选项

其他人如何在SQL Server空间几何体类型中实现这一点

干杯


Matt

迟交答案,但如果它仍然有帮助(或对其他人来说),您应该能够使用SQL 2008执行以下操作

DECLARE @point GEOMETRY = GEOMETRY::STPointFromText('POINT(0 0)', 0);
DECLARE @line GEOMETRY = GEOMETRY::STLineFromText('POINT(10 10, 20 20)', 0);

SELECT STIntersection(@point.STBuffer(@point.STDistance(@line)));

基本上,您可以计算两个几何图形之间的距离,将其用作应该导致几何图形接触的点上的缓冲区,并获取该点的交点。

注意@Road与geography multilestring相同。

设置初始路段
设置@ROAD=geography::STMLineFromText('MULTILINESTRING((-79.9076039999992 32.85190599999985,-79.907708999999983 32.851751,-79.907879999992 32.8515559999995,-79.90788999999981 32.85154299999992,-79.907999999999983 32.851461,-79.9081339999999999932.85137399999986,-79.9083349999998 32.85128699999992,-109909942.859992,-

获取用于新中点计算的路段起点/终点
将@x1=CAST(@Road.STStartPoint().Lat设置为十进制(11,6))
设置@y1=CAST(@Road.STStartPoint()。长度为十进制(12,6))
将@x2=CAST(@Road.STEndPoint().Lat设置为十进制(11,6))
设置@y2=CAST(@Road.STEndPoint()。长度为十进制(12,6))

指定路段中点LAT/LON
将@MidPointLat=CAST((@x1+@x2)/2)设置为nvarchar(11))
将@MidPointLon=CAST((@y1+@y2)/2)设置为nvarchar(12))

设置初始越野质心
SET@RoadMidPt=geography::STPointFromText('POINT(+@MidPointLon++'++@MidPointLat++'),4269)

计算.STIntersection返回道路的缓冲距离(添加.02以确保相交)
设置@RoadMidPtBuffer=@RoadMidPt.STBuffer(@RoadMidPt.STDistance(@Road)+.02)

可能在多个点相交!使用与道路相交的第一个点作为质心
设置@RoadCentroid=@RoadMidPtBuffer.STIntersection(@Road.STPointN)(1)

最近道路/线路质心的最终新LAT/LON

选择@RoadCentroid.Lat、@RoadCentroid.Long

这似乎不适合我……我的线条有多组点。