北京54のCAD座標系84の地理座標系アルゴリズムをオン投影座標

ここでは7つのパラメータによる方法がないので、与えられたパラメータではなく、最初は、地理系回転座標系の座標、その後垂直及び水平補正比を行う投影しました

        パブリック 静的 ダブル[]変換(PointF点)
        { 
            ダブル xParam = 94.362163134086399 ダブル yParam = -310.26525523306055 

            ダブル xMultiple = 1.19862910076924 ;
            ダブル yMultiple = 1 ; 

            // 旋转中心点
            ダブル centerX = 114.00092403 ダブル centerY = 36.14333070 

            // 旋转角度
            ダブル角= 0.064894377180536 

            二重 X =恐らくMath.round(point.X、7)+ 4000000 ダブル=恐らくMath.round Y(point.y ,. 7)+3850万; 

            // ダブルX-60139 = + 4000000;
             // ダブルY = 34944 +3850万; 

            // ガウス投影緯度と経度に逆座標
            INT PROJNOと、int型 ZoneWideを; / /// 帯域
            ダブル [] =出力新しい新しい ダブル [2 ];
             ダブル longitude1、latitude1、longitude0、X0、Y0、XVALはyvalを指定している、であり; // latitude0、
            ダブルE1、E2、F、A、EE、NN、T、C 、M、Dは、R、U、FAI、IPI; 
            IPI = 0.0174532925199433; //// 3.1415926535898 / 180.0; 
            A = 6,378,245.0; F = 1.0 / 298.3; //54個の北京座標系パラメータ
                                             // A = 6,378,140.0; F = 1 / 298.257; // 80西安パラメータ座標 
            。ZoneWide = 6; //// 。6テープ幅 
            PROJNO =(INT)(X- / 1000000L); // 検索バンド番号 
            (PROJNO - 1)longitude0 = * + ZoneWide ZoneWide / 2 ; 
            longitude0 = longitude0 * IPI; // 中央子午線

            X0 = PROJNO 1000000L + * 500000L 
            Y0 = 0 ; 
            XVALは = X-- X0; yvalを指定がY = - Y0 ; // バンド測地 
            E2 = 2 * F - F * F;
            E1 =(1.0 - Math.Sqrt(1 - E2))/(1.0 + Math.Sqrt(1 - E2))。
            それは E2 /(1 - = E2)を、
            M = yvalを指定。
            U = M /(*(1 - E2 / 4 - 3 * * E2 E2 / 64 - 5 * E2 * E2 E2 / 256 ))。
            HEは、 * Math.Sin(U * 2)+(21 * E1 * E1 / 16 - * 55 * E1 E1 E1 * E1 / - U +(27 E1 * * * E1 E1 / 32 3 * E1 / 2)= 32)* Math.Sin(4 * U)
             +(151 * E1 * E1 E1 / 96)* Math.Sin(6 * U)+(1097 * E1 E1 E1 * E1 / 512)* Math.Sin (8 * U)。
            Cは = *(HE)*彼をMath.Cos Math.Cos(HE)。
            T = Math.Tan(HE)*Math.Tan(FAI)。
            NN = A / Math.Sqrt(1.0 - E2 * Math.Sin(FAI)* Math.Sin(FAI))。
            Rは、( - E2 1)/ Math.Sqrt((1 - E2 * Math.Sin(FAI)* Math.Sin(FAI))*(1 - E2 * Math.Sin(FAI)* Math.Sin(※= FAI))*(1 - E2 * Math.Sin 
            (FAI) * Math.Sin(FAI)))。
            D = XVAL / NN。
            // 计算经度(経度)纬度(緯度) 
            longitude1 = longitude0 +(D - (1 + 2 * T + C)* D * D * D / 6 +(5 - 2 * C + 28 * T - 3 * C * C + 8 * EE + 24 * T * T)* D
             * D * D * D * D / 120)/ Math.Cos(FAI)。
            latitude1= FAI - (NN * Math.Tan(FAI)/ R)*(D * D / 2 - (5 + 3 * T + 10 * C - 4 * C * C - 9 * EE)* D * D * D * D / 24 
            +(61 + 90 * T + 298 * C + 45 * Tの*のT - 256 * EE - 3 * C *とC)* D * D * D * D * D * D / 720 )。
            // 现状图 
            出力[0] = longitude1 / IPI * xMultiple + xParam。
            出力[ 1] = latitude1 / IPI * yMultiple + yParam。
            戻り値の出力; 
        }

およそ20メートル、横方向のずれがありますが、垂直方向の偏差を約3メートルあります。CAD無回転するので、回転補正はそうしませんでした。

参照のため、ここでのコードのみ、より良い提案があるが、我々は一緒に勉強前方に置くことができます

おすすめ

転載: www.cnblogs.com/smlPig/p/11060216.html