.Net 百度经纬度转高德

1、需求

由于我们项目里面的经纬坐标是百度的,而对接的第三方需要的是高德的经纬坐标,两者之间是有位差区别的,不能直接使用,我们需要通过一个算法将百度经纬度转化为高德经纬度,在百度官网上,有java算法,可以实现他们之间的转化,但是没有.Net版本,所以参考java版本,改写一版.Net 版本。

2、实现代码

 1      /// <summary>
 2         /// 百度经纬度转高德,latitude/ longitude 纬度/经度
 3         /// </summary>
 4         /// <param name="lat">维度</param>
 5         /// <param name="lon">经度</param>
 6         /// <returns></returns>
 7         public static double[] baidu2AMap(double lat, double lon)
 8         {
 9             try
10             {
11                 if (lat != 0 && lon != 0)
12                 {
13                     double var4 = 0.006401062D;
14                     double var6 = 0.0060424805D;
15                     double[] var2 = null;
16 
17                     for (int var3 = 0; var3 < 2; ++var3)
18                     {
19                         var2 = new double[2];
20                         double var16 = lon - var4;
21                         double var18 = lat - var6;
22                         double[] var29 = new double[2];
23                         double var24 = Math.Cos(b(var16) + Math.Atan2(var18, var16)) * (a(var18) + Math.Sqrt(var16 * var16 + var18 * var18)) + 0.0065D;
24                         double var26 = Math.Sin(b(var16) + Math.Atan2(var18, var16)) * (a(var18) + Math.Sqrt(var16 * var16 + var18 * var18)) + 0.006D;
25                         var29[1] = (c(var24));
26                         var29[0] = (c(var26));
27                         var2[1] = (c(lon + var16 - var29[1]));
28                         var2[0] = (c(lat + var18 - var29[0]));
29                         var4 = lon - var2[1];
30                         var6 = lat - var2[0];
31                     }
32 
33                     return var2;
34                 }
35             }
36             catch (Exception ex)
37             {
38                 throw ex;
39             }
40 
41             return new double[] { lat, lon };
42         }
43         private static double a(double var0)
44         {
45             return Math.Sin(var0 * 3000.0D * (3.141592653589793D / 180.0D)) * 2.0E-5D;
46         }
47 
48         private static double b(double var0)
49         {
50             return Math.Cos(var0 * 3000.0D * (3.141592653589793D / 180.0D)) * 3.0E-6D;
51         }
52 
53         private static double c(double var0)
54         {
55             return Math.Round(var0, 8);
56         }
原文地址:https://www.cnblogs.com/MirZhai/p/10681485.html