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