在SQL空间数据中使用变量

时间:2019-04-10 14:21:56

标签: sql sql-server spatial-query sqlgeography

我正在尝试编写一个SQL存储过程,该过程将确定某个点是否在缓冲区内。到目前为止,我已经能够对查询中的值进行硬编码,并且它们可以按预期工作,但是当我尝试用变量替换硬编码的值时,我会遇到问题。

这有效:

DECLARE @g geography;   
Declare @Latitude float; 
declare @Longitude float;

Set @g = geography::STPointFromText('POINT(' + CAST(@longitude as VARCHAR(16)) + ' ' + CAST(@latitude as VARCHAR(16)) + ')', 4326)

declare @bufloc geography = geography::Point(52.677777, -1.280786,
 4326).STBuffer(1000)

SELECT CASE @g.STIntersects(@bufloc)  WHEN 1 THEN '@g intersects @h'  
 ELSE '@g does not intersect @h'   
END;

但是,如果我声明第二组坐标并尝试将变量传递到@bufloc中,则会中断查询。

Declare @BufLongitude float; Declare @DistanceInMeteres int;

declare @bufloc geography = geography::STPointFromText('POINT(' +
CAST(@BufLatitude as VARCHAR(16)) + ' ' + CAST(@BufLongitude as
VARCHAR(16)) + ')', 4326).STBuffer(1000)

我该怎么写才能使工作正常?最后,我想将两个坐标与距离参数一起传递给存储过程,以用于缓冲区的构造,如果该点可以位于结果缓冲区中,则返回true或false。

当硬编码查询返回相同值的@g相交@h时,该查询返回假值,并返回'@g不相交@h'。

0 个答案:

没有答案