Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вземете всички точки (кръгове с радиус), които се припокриват с дадена точка

Да, това е точно нещо като geography и пространствените методи са добри в. Ето кратък пример:

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

Имайте предвид, че тук, за да конструирате geography стойности Използвам имплицитно преобразуване от низ, което зад кулисите извиква geography::Parse .

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

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запознаване с вашето работно натоварване на SQL Server

  2. Разгръщане на сертификат за криптирана връзка SQL Server

  3. Брой(*) срещу Брой(1) - SQL Server

  4. Какво е @@MAX_PRECISION в SQL Server?

  5. Какво се случва с незавършена транзакция, когато връзката е затворена?