计算c#中2点之间的距离

我试图找出一种方法来计算c#中2点之间的距离。

这是我一直在尝试的代码,但我担心我得到的答案是不正确的。

static void Main() { //postcode australia 2600 -> 3000 float latA = -31.997976f; float longA = 115.762877f; float latB = -31.99212f; float longB = 115.763228f; decimal distance = (DistanceBetween(latA, latB, longA, longB)); Console.WriteLine("Distance is" + distance); Console.ReadLine(); } static decimal DistanceBetween(float latA, float longA, float latB, float longB) { var RadianLatA = Math.PI * latA / 180; var RadianLatb = Math.PI * latB / 180; var RadianLongA = Math.PI * longA / 180; var RadianLongB = Math.PI * longB / 180; double theDistance = (Math.Sin(RadianLatA)) * Math.Sin(RadianLatb) + Math.Cos(RadianLatA) * Math.Cos(RadianLatb) * Math.Cos(RadianLongA - RadianLongB); return Convert.ToDecimal(((Math.Acos(theDistance) * (180.0 / Math.PI)))) * 69.09M * 1.6093M; } 

这是根据在这个网站上发现的响应改编自这里地址之间的距离

对于出了什么问题的任何想法/

谢谢瑞恩

我通常使用的类是GeoCoordinate

 double latA = -31.997976f; double longA = 115.762877f; double latB = -31.99212f; double longB = 115.763228f; var locA = new GeoCoordinate(latA, longA); var locB = new GeoCoordinate(latB, longB); double distance = locA.GetDistanceTo(locB ); // metres 
 double lat1 = {}; double lat2 = {}; double lon1 = {}; double lon2 = {}; var R = 6376.5000; //Km lat1 = lat1.ToRad(); lat2 = lat2.ToRad(); lon1 = lon1.ToRad(); lon2 = lon2.ToRad(); var dLat = lat2 - lat1; var dLon = lon2 - lon1; var a = Math.Pow(Math.Sin(dLat / 2), 2) + (Math.Pow(Math.Sin(dLon / 2), 2) * Math.Cos(lat1) * Math.Cos(lat2)); var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); var distance = R * c; public double ToRad(this double degs) { return degs * (Math.PI/180.0); } 

输入预计会翻倍。

这是hasrsine公式,它用于计算两点之间地球上的距离。 这是直线上的距离,如果您需要路径上的距离,则必须找到该路径上的所有点,然后计算每两个点之间的距离,然后取总和。

您可以使用DbGeography进行空间计算。 它有DbGeography.Distance方法,用于计算两个gps点之间的距离。

否则,尝试Ref:Harversine Formula来计算两点之间的距离。

距离公式:给定两个点(x1,y1)和(x2,y2),这些点之间的距离由公式给出:

在此处输入图像描述

相应地使用它