SQL Koordinatlar Arası Mesafe Hesaplatma
Bir proje kapsamında satış temsilcilerinin işlem yaptıkları yerin koordinatı ile müşteri koordinatının arasındaki mesafenin ölçülmesi gerekiyordu. Aşağıdaki fonksiyonu kullanarak koordinatlar arası mesafeyi hesaplayabiliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
CREATE FUNCTION KoordinatHesapla(@Latitude1 float,@Longitude1 float,@Latitude2 float,@Longitude2 float,@Distance NVARCHAR(10)) RETURNS FLOAT AS BEGIN -- CONSTANTS DECLARE @EarthRadiusInMiles FLOAT=(CASE @Distance WHEN 'Mil' THEN 3959 WHEN 'Kilometre' THEN 6371 ELSE 0 END); DECLARE @PI FLOAT=PI(); DECLARE @lat1Radians FLOAT=@Latitude1 * @PI / 180 DECLARE @long1Radians FLOAT=@Longitude1 * @PI / 180; DECLARE @lat2Radians FLOAT=@Latitude2 * @PI / 180; DECLARE @long2Radians FLOAT=@Longitude2 * @PI / 180; RETURN Acos( Cos(@lat1Radians)*Cos(@long1Radians)*Cos(@lat2Radians)*Cos(@long2Radians)+ Cos(@lat1Radians)*Sin(@long1Radians)*Cos(@lat2Radians)*Sin(@long2Radians)+ Sin(@lat1Radians)*Sin(@lat2Radians) ) * @EarthRadiusInMiles; END |
Kullanmak için aşağıdaki gibi fonksiyonu select edip önce ilk koordinat sonra ikinci koordinat ve KM dönmesi için Kilometre MİL Dönmesi için Mil anahtarını veriyoruz ve çalıştırıyoruz. Fonksiyon bize girilen iki koordinatın arasındaki mesafeyi dönüyor. Birden çok sorgulama için iç select kullanarak sonuçları alabilirsiniz.
1 |
SELECT dbo.KoordinatHesapla(40.596000,29.577303,39.5853000,30.5104000,'Kilometre') |
Eğer veriyi bir raporda görselleştirmek, konumun yerini göstermek isterseniz alttaki link gibi koordinatları yerleştirerek güzel bir rapor oluşturabilirsiniz.
1 |
https://www.google.com/maps?q=40.596000,29.577303 |