Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenir tous les points (cercles avec rayon), qui chevauchent un point donné

Oui, c'est exactement le genre de choses que la geography et les méthodes spatiales sont bonnes. Voici un court exemple :

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 );

Notez qu'ici pour construire la geography J'utilise une conversion implicite de string, qui appelle en coulisse geography::Parse .

DECLARE @MyLocation geography = 'POINT(-0.115063 51.550231)';

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