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