GPSは高い道徳緯度と経度の座標を回します

///  <まとめ> 
    /// 変換ツール
     ///  </要約> 
    パブリック クラスGPSTransToAMap 
    { 
        // 楕円パラメータ
        静的 ダブル PI = 3.14159265358979324 ;
         静的 ダブル A = 6378245.0 ;
         静的 ダブル EE = 0.00669342162296594323 ; 

        ///  <要約> 
        /// GPSは高いドイツ進む
         ///  </要約> 
        ///  <PARAM名= "wgLat"> GPS寸法</ PARAM> 
        ///  <PARAM NAME = "wgLon"> GPS経度を</ param>の
        ///  < "の緯度と経度" PARAM名=> 转化后的坐标</ PARAM> 
        パブリック 静的 ダブル [](変換ダブル wgLat、ダブルwgLon)を
        { 
            ダブル []緯度経度= 新しい ダブル [ 2 ]。// 转化后的坐标
            場合(outOfChina(wgLat、wgLon))
            { 
                緯度と経度[ 0 ] = wgLat。
                緯度と経度[ 1 ] = wgLon。
                返すの緯度と経度; 
            } 
             DLAT = transformLat(wgLon - 105.0、wgLat - 35.0 )。
            二重 dLon = transformLon(wgLon - 105.0、wgLat - 35.0 )。
            ダブル radLat = wgLat / 180.0 *のパイ。
            ダブルマジック= Math.Sin(radLat)。
            魔法 = 1 - EE *マジック* 魔法。
            ダブル sqrtMagic = Math.Sqrt(魔法); 
            DLAT =(DLAT * 180.0)/((*(1 - EE))/(マジック* sqrtMagic)* PI)。
            dLon =(dLon * 180.0)/(/ sqrtMagic * Math.Cos(radLat)* PI)。
            緯度と経度[ 0 ] = wgLat + DLAT。
            緯度と経度[ 1 ] = wgLon + dLon。
            返すの緯度と経度; 
        } 

        プライベート 静的ブールoutOfChina(ダブル緯度、ダブル経度)
        { 
            場合(LON < 72.004 || LON> 137.8347 戻り 場合に(LAT < 0.8293 ||緯度> 55.8271 を返す ;
            リターン はfalse ; 
        } 

        プライベート 静的 ダブル transformLat(ダブル X、ダブルY)
        { 
            ダブル RET = - 100.0 + 2.0 * X + 3.0 * Y + 0.2 * yは* Y + 0.1 * X * Y + 0.2 * Math.Sqrt(Math.Abs​​(X )); 
            RET + =(20.0 * Math.Sin(6.0 * X * PI)+ 20.0 * Math.Sin(2.0 * X * PI))* 2.0 / 3.0 
            RET + =(20.0 * Math.Sin(Y * PI)+ 40.0 * Math.Sin(Y / 3.0 * PI))* 2.0 / 3.0 
            RET + =(160.0 * Math.Sin(Y / 12.0 * PI)+ 320 * Math.Sin(Y * PI / 30.0))* 2.0 / 3.0 リターンRET; 
        } 

        プライベート 静的 ダブル transformLon(ダブル X、ダブルY)
        { 
            ダブル RET = 300.0 + X +2.0 * Y + 0.1 * X * X + 0.1 * X * Y + 0.1 * Math.Sqrt(Math.Abs​​(X)); 
            RET + =(20.0 * Math.Sin(6.0 * X * PI)+ 20.0 * Math.Sin(2.0 * X * PI))* 2.0 / 3.0 
            RET + =(20.0 * Math.Sin(X * PI)+ 40.0 * Math.Sin(X / 3.0 * PI))* 2.0 / 3.0 
            RET + =(150.0 * Math.Sin(X / 12.0 * PI)+ 300.0Math.Sin *(X- / 30.0 * PI))* 2.0 / 3.0 ;
             リターンRET; 
        } 
        // ----------------
         // 著作権:この記事では、「CSDNのブロガーでありますm0_38004177のオリジナルの記事、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースのリンクと、この文を添付してください。
        // オリジナルリンク:https://blog.csdn.net/m0_38004177/article/details/93974126 
    }

 

おすすめ

転載: www.cnblogs.com/SmilePastaLi/p/12100375.html