using System;
namespace Falcon.Core.Helpers
{
public class GeoCalculator
{
private static double ToRadians(double degree)
{
return (degree * Math.PI) / 180;
}
public static double Distance(double latitude1, double latitude2, double longitude1, double longitude2)
{
// The math module contains
// a function named toRadians
// which converts from degrees
// to radians.
longitude1 = ToRadians(longitude1);
longitude2 = ToRadians(longitude2);
latitude1 = ToRadians(latitude1);
latitude2 = ToRadians(latitude2);
// Haversine formula
double diffLongitude = longitude2 - longitude1;
double diffLatitude = latitude2 - latitude1;
double a = Math.Pow(Math.Sin(diffLatitude / 2), 2) +
Math.Cos(latitude1) * Math.Cos(latitude2) *
Math.Pow(Math.Sin(diffLongitude / 2), 2);
double c = 2 * Math.Asin(Math.Sqrt(a));
// Radius of earth in
// kilometers. Use 3956
// for miles
double r = 6371;
// calculate the result
return (c * r);
}
}
}
31 Ağustos 2020 Pazartesi
Enlem boylam uzaklık hesaplama (c#)
Enlem boylam uzaklık hesaplama
Since you're using SQL Server 2008, you have the geography
data type available, which is designed for exactly this kind of data:
DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'
SELECT @source.STDistance(@target)
Gives
----------------------
538404.100197555
(1 row(s) affected)
Telling us it is about 538 km from (near) London to (near) Edinburgh.
Naturally there will be an amount of learning to do first, but once you know it it's far far easier than implementing your own Haversine calculation; plus you get a LOT of functionality.
If you want to retain your existing data structure, you can still use STDistance
, by constructing suitable geography
instances using the Point
method:
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
Kaydol:
Kayıtlar (Atom)
.net 6 mapget kullanımı
app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { var response = JsonConvert.Seriali...
-
Komut ekranına aşagıdaki komutları yazarak windows service işlemlerini gerçekleştirebiliriz. Not : Komut ekranı (Başlat -> Çalıştır -&g...
-
COMMAND PROMPT TEMEL VE İLERİ DÜZEY ANLATIM Command Prompt komutlarını anlatmaya başlamadan önce, MS-DOS komut türlerine değinelim. Komut...
-
(3)BİN (6)MİLYON (9)MİLYAR (12)TRİLYON (15)KATRİLYON (18)KENTİLYON (21)SEKSİLYON (24)SEPTİLYON (27)OKTİLYON (30)NONİLYON (33)DESİL...