Использование Varables в SQL пространственных данных - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь написать хранимую процедуру 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» для того же значения.

...