SQL 点围绕 A 和 B 之间的线

SQL points around line between A and B

在 SQL Server 2014 中,我有一个包含几何点的数据库 - City

从A市开车到B市给了我一条线(我们坐飞机)。

我需要在我的数据库中找到点 - 在这条线的特定距离(10 英里)"off-track" 内。

我知道如何找到一个点周围最近的点,如何计算它们之间的距离 - 但是 - 我如何沿着这条线搜索?喜欢导航中的 POI...

DECLARE @g geography 

SELECT @g = Geo_LatLong_deg 
FROM airports 
WHERE iata_code = 'MyAirportCode' -- radius 100km 

SELECT * 
FROM airports 
WHERE @g.STDistance(Geo_LatLong_deg) <= 100000

使用STBuffer method。假设您有一些方法可以将您的路径确定为地理实例,它很简单:

declare @distance float = 16.09344 --10 miles in km

select *
from airports
where @path.STBuffer(@distance).STIntersects(Geo_LatLong_deg) = 1

为了解释,STBuffer() 方法创建了一个区域,该区域是路径 10 英里范围内的一组点。然后,我们 select 来自您 table 的所有点,这些点与 STIntersects() 的区域相交。

感谢您的帮助。我在字符串中混淆了 Long/Lat 序列...现在我得到了预期的结果。 这里的代码 - 如果其他人想看看如何结合两个或多个点 - 连同线周围的区域。

    DECLARE @BuildString NVARCHAR(MAX)
SELECT @BuildString = COALESCE(@BuildString + ',', '') + CAST(longitude_deg AS NVARCHAR(50)) + ' ' + CAST(latitude_deg AS NVARCHAR(50))
FROM dbo.airports where iata_code='RLG' or iata_code='FRA'
ORDER BY ID             

SET @BuildString = 'LINESTRING(' + @BuildString + ')';   
DECLARE @LineFromPoints geography = geography::STLineFromText(@BuildString, 4326);

declare @distance float = 50000 

select *
from airports
where @LineFromPoints.STBuffer(@distance).STIntersects(airports.GEO_LatLong_deg) = 1 and type<>'heliport'