Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Holen Sie sich alle Punkte (Kreise mit Radius), die den gegebenen Punkt überlappen

Ja, das ist genau so etwas wie geography und räumliche Methoden sind gut. Hier ist ein kurzes Beispiel:

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

Beachten Sie, dass hier die geography konstruiert wird Werte verwende ich eine implizite Konvertierung von String, die hinter den Kulissen geography::Parse aufruft .

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

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