Вы уже используете SQL Server Пространственные и географические столбцы, поэтому вы можете просто использовать следующее, чтобы получить результат. Есть два способа:
Использование STDistance ():
-- Get the center point
DECLARE @g geography
SELECT @g = geo FROM yourTable WHERE PointId = something
-- Get the results, radius 100m
SELECT * FROM yourTable WHERE @g.STDistance(geo) <= 100
Использование STBuffer () и STIntersects
-- Get the center buffer, 100m radius
DECLARE @g geography
SELECT @g = geo.STBuffer(100) FROM yourTable WHERE PointId = something
-- Get the results within the buffer
SELECT * FROM yourTable WHERE @g.STIntersects(geo) = 1
Исходя из моего опыта, эффективность двух методов зависит от распределения данных и размера сетки пространственного индекса, поэтому проверьте свои собственные данные, чтобы решить, какой из них использовать. Не забудьте создать пространственный индекс в столбце гео.