Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obter todos os pontos (círculos com raio), que se sobrepõem a determinado ponto


Sim, esse é exatamente o tipo de coisa que geography e métodos espaciais são bons. Aqui está um pequeno exemplo:
DECLARE @Restaurant TABLE (
    Name nvarchar(50),
    Location geography,
    DeliveryRadiusMetres int
);

INSERT @Restaurant
VALUES
-- long lat
('Dominos','POINT(-0.109339 51.532835)',2000 ),
('Pizza Hut','POINT(-0.102961 51.541157)',2000 );

Observe que aqui para construir a geography valores Estou usando uma conversão implícita de string, que nos bastidores chama geography::Parse .
DECLARE @MyLocation geography = 'POINT(-0.115063 51.550231)';

SELECT
    Name
FROM
    @Restaurant R
WHERE
    R.Location.STDistance(@MyLocation) <= R.DeliveryRadiusMetres
;