Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tính toán khoảng cách giữa hai điểm (Vĩ độ, Kinh độ)

Vì bạn đang sử dụng SQL Server 2008, bạn có geography loại dữ liệu có sẵn, được thiết kế cho chính xác loại dữ liệu này:

DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'

SELECT @source.STDistance(@target)

Cung cấp

----------------------
538404.100197555

(1 row(s) affected)

Cho chúng tôi biết là khoảng 538 km từ (gần) Luân Đôn đến (gần) Edinburgh.

Đương nhiên sẽ có một số việc học phải làm trước, nhưng một khi bạn biết điều đó sẽ dễ dàng hơn nhiều so với việc thực hiện phép tính Haversine của riêng bạn; cộng với việc bạn nhận được rất nhiều chức năng.

Nếu bạn muốn giữ lại cấu trúc dữ liệu hiện có của mình, bạn vẫn có thể sử dụng STDistance , bằng cách xây dựng geography phù hợp các trường hợp sử dụng Point phương pháp:

DECLARE @orig_lat DECIMAL(12, 9)
DECLARE @orig_lng DECIMAL(12, 9)
SET @orig_lat=53.381538 set @orig_lng=-1.463526

DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);

SELECT *,
    @orig.STDistance(geography::Point(dest.Latitude, dest.Longitude, 4326)) 
       AS distance
--INTO #includeDistances
FROM #orig dest


  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 FOR XML Path tạo các nút lặp lại

  2. Nhận danh sách cơ sở dữ liệu từ SQL Server

  3. Cách ghi lại cơ sở dữ liệu SQL Server của bạn

  4. SqlParameter không cho phép Tên bảng - các tùy chọn khác mà không có cuộc tấn công tiêm sql?

  5. Một cách để trích xuất từ ​​dữ liệu giá trị DateTime mà không cần giây