计算2个坐标(经纬度)之间的距离,.Net

.Net 中计算2个点之间的距离的方法,或者叫计算2个坐标,2个经纬度之间的距离。

代码如下:

 1 /// <summary>
 2     /// Calculates the distance between two geographics locations
 3     /// </summary>
 4     public static class GeoDistance
 5     {
 6         public static double Between(double latitude1, double longitude1, double latitude2, double longitude2,
 7             DistanceUnits units = DistanceUnits.Kilometers)
 8         {
 9             double a1 = latitude1 * RadianConversionFactor;
10             double b1 = longitude1 * RadianConversionFactor;
11             double a2 = latitude2 * RadianConversionFactor;
12             double b2 = longitude2 * RadianConversionFactor;
13 
14             double distance =
15                 Math.Acos(Math.Cos(a1) * Math.Cos(b1) * Math.Cos(a2) * Math.Cos(b2) +
16                     Math.Cos(a1) * Math.Sin(b1) * Math.Cos(a2) * Math.Sin(b2) + Math.Sin(a1) * Math.Sin(a2)) * DistanceConstants[units];
17 
18             return distance;
19         }
20 
21         private const double RadianConversionFactor = Math.PI / 180;
22 
23         private static readonly Dictionary<DistanceUnits, double> DistanceConstants = new Dictionary<DistanceUnits, double>(3) {
24             { DistanceUnits.Miles, 3963.1 },
25             { DistanceUnits.NauticalMiles, 3443.9 },
26             { DistanceUnits.Kilometers, 6378 }
27         };
28     }
29 
30     public enum DistanceUnits
31     {
32         Miles,
33         NauticalMiles,
34         Kilometers,
35     }

代码很简单,但是费了不少劲。就是还没测试效率怎么样。如果有高效的算法,请不要吝啬指教!!!

转载于:https://www.cnblogs.com/rockyyue/p/4155954.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值