Karena Anda menggunakan SQL Server 2008, Anda memiliki geography
tipe data yang tersedia, yang dirancang untuk jenis data ini:
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
Memberi
----------------------
538404.100197555
(1 row(s) affected)
Memberitahu kami bahwa jaraknya sekitar 538 km dari (dekat) London ke (dekat) Edinburgh.
Tentu saja akan ada sejumlah pembelajaran yang harus dilakukan terlebih dahulu, tetapi begitu Anda mengetahuinya, itu jauh lebih mudah daripada menerapkan perhitungan Haversine Anda sendiri; plus Anda mendapatkan BANYAK fungsi.
Jika Anda ingin mempertahankan struktur data yang ada, Anda masih dapat menggunakan STDistance
, dengan menyusun geography
. yang sesuai instance menggunakan Point
metode:
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