爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13898|回复: 21

兰伯特投影转经纬度算法

[复制链接]

新浪微博达人勋

发表于 2012-11-29 13:43:21 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
求助,兰伯特投影转经纬度的算法?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-10 20:14:29 | 显示全部楼层
本帖最后由 luckycomcn 于 2012-12-10 20:16 编辑

自己写的兰伯特投影反解


  1.             /// <summary>
  2.             /// 兰伯特投影转换为经纬投影,手动指定长半轴和短半轴
  3.             /// </summary>
  4.             /// <param name="LonRef">参考经度,为了方便,按照角度输入</param>
  5.             /// <param name="LatRef">参考纬度,为了方便,按照角度输入</param>
  6.             /// <param name="Slat">m=1时的南纬度,为了方便,按照角度输入</param>
  7.             /// <param name="Nlat">m=1时的北纬度,为了方便,按照角度输入</param>
  8.             /// <param name="deltaY">Y方向上的距离,以米为单位</param>
  9.             /// <param name="deltaX">X方向上的距离,以米为单位</param>
  10.             /// <param name="EarA">地球长半轴</param>
  11.             /// <param name="EarB">地球短半轴</param>
  12.             /// <returns></returns>
  13.             public static double[] lccToLatLon(double LonRef, double LatRef, double Slat, double Nlat, double deltaY, double deltaX, double EarA, double EarB)
  14.             {
  15.                 //这个函数参考了European Petroleum Survey Group的Coordinate Conversions and Transformations including Formulas
  16.                 double[] latAndLon = new double[2];
  17.                 double L0, B0, B1, B2, Y, X;
  18.                 double a, b, f, e;    //四个变量分别是地球长半轴,地球短半轴,扁率,第一偏心率
  19.                 double mB1, mB2, tB0, tB1, tB2, n, F, r0, rd, td, Thetad, L, B, errf;
  20.                 int num;
  21.                 double pi = Math.PI; //PI,圆周率
  22.                 a = EarA;    //地球长半轴
  23.                 b = EarB;    //地球短半轴
  24.                 L0 = LonRef;
  25.                 B0 = LatRef;
  26.                 B1 = Slat;
  27.                 B2 = Nlat;
  28.                 Y = deltaY;
  29.                 X = deltaX;
  30.                 //各种输入经纬度转化成弧度
  31.                 L0 = L0 / 180 * pi;
  32.                 B0 = B0 / 180 * pi;
  33.                 B1 = B1 / 180 * pi;
  34.                 B2 = B2 / 180 * pi;
  35.                 f = (a - b) / a;
  36.                 e = Math.Pow((2 * f - Math.Pow(f, 2)), 0.5);

  37.                 mB1 = Math.Cos(B1) / Math.Pow((1 - Math.Pow(e, 2) * Math.Sin(B1) * Math.Sin(B1)), 0.5);
  38.                 mB2 = Math.Cos(B2) / Math.Pow((1 - Math.Pow(e, 2) * Math.Sin(B2) * Math.Sin(B2)), 0.5);
  39.                 tB0 = Math.Tan(pi / 4 - B0 / 2) / Math.Pow(((1 - e * Math.Sin(B0)) / (1 + e * Math.Sin(B0))), (e / 2));
  40.                 tB1 = Math.Tan(pi / 4 - B1 / 2) / Math.Pow(((1 - e * Math.Sin(B1)) / (1 + e * Math.Sin(B1))), (e / 2));
  41.                 tB2 = Math.Tan(pi / 4 - B2 / 2) / Math.Pow(((1 - e * Math.Sin(B2)) / (1 + e * Math.Sin(B2))), (e / 2));
  42.                 n = Math.Log(mB1 / mB2) / Math.Log(tB1 / tB2);
  43.                 F = mB1 / (n * Math.Pow(tB1, n));
  44.                 r0 = a * F * Math.Pow(tB0, n);
  45.                 rd = Math.Sign(n) * Math.Pow((Math.Pow(Y, 2) + Math.Pow((r0 - X), 2)), 0.5);
  46.                 td = Math.Pow((rd / (a * F)), (1 / n));
  47.                 Thetad = Math.Atan(Y / (r0 - X));
  48.                 L = Thetad / n + L0;
  49.                 B = B0;
  50.                 errf = 1;
  51.                 num = 0;

  52.                 while (Math.Abs(errf) > (float)(1e-8) && num < 2000)
  53.                 {
  54.                     B1 = pi / 2 - 2 * Math.Atan(td * Math.Pow(((1 - e * Math.Sin(B)) / (1 + e * Math.Sin(B))), (e / 2)));
  55.                     errf = B1 - B;
  56.                     B = B1;
  57.                     num = num + 1;
  58.                 }
  59.                 B = B * 180 / pi;
  60.                 L = L * 180 / pi;
  61.                 latAndLon[0] = L;
  62.                 latAndLon[1] = B;
  63.                 return latAndLon;
  64.             }




coordinate+conversions+and+transformation+including+formulas.pdf

2.9 MB, 下载次数: 302, 下载积分: 金钱 -5

点评

关于输入的参数可以详细的说下嘛 Slat, Nlat, deltaY, deltaX  发表于 2020-5-8 15:45
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2012-11-29 16:23:04 | 显示全部楼层
兰伯特投影的反解公式,纬度B是如何实现迭代的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 09:43:18 | 显示全部楼层
{:e311_b:}{:e311_b:}{:e311_b:}{:e311_b:}同求
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-10 20:41:08 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-16 19:57:47 | 显示全部楼层
很不错啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-1-15 23:47:10 | 显示全部楼层
luckycomcn 发表于 2012-12-10 20:14
自己写的兰伯特投影反解

感谢感谢!!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-25 11:05:45 | 显示全部楼层
学习学习,有问题再来请教
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-25 00:04:05 | 显示全部楼层
可以请楼主分析下经纬度转兰伯特投影的公式和依据么..?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-25 15:43:54 | 显示全部楼层
zitaxcy 发表于 2013-12-25 00:04
可以请楼主分析下经纬度转兰伯特投影的公式和依据么..?

学习中......,感谢分享
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表