注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

LatLon <--> Lambert72  

2014-11-30 11:18:47|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

參考:
public static Lambert72 LatLon_To_Lambert72(LatLon latlon)
{
    var lat = latlon.Lat;
    var lng = latlon.Lon;

    double LongRef = 0.076042943;
    //=4°21'24"983
    double bLamb = 6378388 * (1 - (1 / 297));
    double aCarre = Math.Pow(6378388, 2);
    double eCarre = (aCarre - Math.Pow(bLamb, 2)) / aCarre;
    double KLamb = 11565915.812935;
    double nLamb = 0.7716421928;

    double eLamb = Math.Sqrt(eCarre);
    double eSur2 = eLamb / 2;

    //conversion to radians
    lat = (Math.PI / 180) * lat;
    lng = (Math.PI / 180) * lng;

    double eSinLatitude = eLamb * Math.Sin(lat);
    double TanZDemi = (Math.Tan((Math.PI / 4) - (lat / 2))) * (Math.Pow(((1 + (eSinLatitude)) / (1 - (eSinLatitude))), (eSur2)));

    double RLamb = KLamb * (Math.Pow((TanZDemi), nLamb));

    double Teta = nLamb * (lng - LongRef);

    double x = 0;
    double y = 0;

    x = 150000 + 0.01256 + RLamb * Math.Sin(Teta - 0.000142043);
    y = 5400000 + 88.4378 - RLamb * Math.Cos(Teta - 0.000142043);

    return new Lambert72(x, y);
}

public static LatLon Lambert72_To_LatLon(Lambert72 lb72)
{
    double X = lb72.X;
    double Y = lb72.Y;

    double LongRef = 0.076042943;
    //=4°21'24"983
    double nLamb = 0.7716421928;
    double aCarre = Math.Pow(6378388, 2);
    double bLamb = 6378388 * (1 - (1 / 297));
    double eCarre = (aCarre - Math.Pow(bLamb, 2)) / aCarre;
    double KLamb = 11565915.812935;

    double eLamb = Math.Sqrt(eCarre);
    double eSur2 = eLamb / 2;

    double Tan1 = (X - 150000.01256) / (5400088.4378 - Y);
    double Lambda = LongRef + (1 / nLamb) * (0.000142043 + Math.Atan(Tan1));
    double RLamb = Math.Sqrt(Math.Pow((X - 150000.01256), 2) + Math.Pow((5400088.4378 - Y), 2));

    double TanZDemi = Math.Pow((RLamb / KLamb), (1 / nLamb));
    double Lati1 = 2 * Math.Atan(TanZDemi);

    double eSin = 0;
    double Mult1 = 0;
    double Mult2 = 0;
    double Mult = 0;
    double LatiN = 0;
    double Diff = 0;

    double lat = 0;
    double lng = 0;

    do {
        eSin = eLamb * Math.Sin(Lati1);
        Mult1 = 1 - eSin;
        Mult2 = 1 + eSin;
        Mult = Math.Pow((Mult1 / Mult2), (eLamb / 2));
        LatiN = (Math.PI / 2) - (2 * (Math.Atan(TanZDemi * Mult)));
        Diff = LatiN - Lati1;
        Lati1 = LatiN;
    } while (Math.Abs(Diff) > 2.77777E-08);

    lat = (LatiN * 180) / Math.PI;
    lng = (Lambda * 180) / Math.PI;

    return new LatLon(lat, lng);
}
  评论这张
 
阅读(288)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017