旧图幅号计算

//获取旧图幅号
        private string GetOldTFBH(decimal old_d_B, decimal old_f_B, decimal old_s_B, decimal old_d_L, decimal old_f_L, decimal old_s_L, AbstractMapScale mapScale)
        {
            decimal a = 0M;
            decimal b = 0M;
            //西南图廓点 转为度
            decimal B = old_d_B + old_f_B / 60M + old_s_B / 3600M;
            decimal L = old_d_L + old_f_L / 60M + old_s_L / 3600M;
            //            
            string bit_1 = "";
            string bit_2 = "";
            //-----
            a = Math.Floor(B / 4.0M) + 1;    //商取整【B/4】+1                    
            b = Math.Floor(L / 6.0M) + 31;   //商取整【L/6】+31
            //
            switch (a.ToString())
            {
                case "1": bit_1 = "A"; break;
                case "2": bit_1 = "B"; break;
                case "3": bit_1 = "C"; break;
                case "4": bit_1 = "D"; break;
                case "5": bit_1 = "E"; break;
                case "6": bit_1 = "F"; break;
                case "7": bit_1 = "G"; break;
                case "8": bit_1 = "H"; break;
                case "9": bit_1 = "I"; break;
                case "10": bit_1 = "J"; break;
                case "11": bit_1 = "K"; break;
                case "12": bit_1 = "L"; break;
                case "13": bit_1 = "M"; break;
                case "14": bit_1 = "N"; break;
                case "15": bit_1 = "O"; break;
                case "16": bit_1 = "P"; break;
                case "17": bit_1 = "Q"; break;
                case "18": bit_1 = "R"; break;
                case "19": bit_1 = "S"; break;
                default:
                    break;
            }
            bit_2 = b.ToString();
            //-----
            if (mapScale.MapScale == EnumMapScale.EnumMapScale_1000000)
            {
                //返回1:100万图幅号
                return bit_1 + "-" + bit_2;
            }
            else
            {
                string bit_3 = "";
                string bit_4 = "";
                string bit_5 = "";
                //获取新编号的行,列号
                decimal c = 0M;
                decimal d = 0M;
                GetMapScaleRowsCols(B, L, mapScale, ref c, ref d);
                //
                switch (mapScale.MapScale)
                {                   
                    case EnumMapScale.EnumMapScale_500000:   //1:50万
                        {
                            bit_3 = "";
                            decimal X50 = (c - 1) * 2 + (d - 1) + 1;     //旧图幅号对应的地图代码  50W
                            switch (X50.ToString())
                            {
                                case "1": bit_3 = "A"; break;                                   
                                case "2": bit_3 = "B"; break; 
                                case "3": bit_3 = "C"; break;
                                case "4": bit_3 = "D"; break; 
                            }
                            return bit_1 + "-" + bit_2 + "-" + bit_3;
                        }
                        break;
                    case EnumMapScale.EnumMapScale_B_250000:
                        {
                            bit_3 = "";
                            decimal X25 = (c - 1) * 4 + (d - 1) + 1;      //旧图幅号对应的地图代码  25W
                            bit_3 = X25.ToString();
                            bit_3 = bit_3.PadLeft(2, '0');
                            return bit_1 + "-" + bit_2 + "-[" + bit_3 + "]";
                        }
                        break;
                    case EnumMapScale.EnumMapScale_C_200000:
                        {
                            bit_3 = "";
                            decimal X25 = (c - 1) * 6 + (d - 1) + 1;      //旧图幅号对应的地图代码  20W  
                            bit_3 = X25.ToString();
                            bit_3 = bit_3.PadLeft(2, '0');
                            return bit_1 + "-" + bit_2 + "-(" + bit_3 + ")";
                        }
                        break;
                    case EnumMapScale.EnumMapScale_D_100000:
                        {
                            bit_3 = "";
                            decimal X10 = (c - 1) * 12 + (d - 1) + 1;   //旧图幅号对应的地图代码    10W
                            bit_3 = X10.ToString();
                            bit_3 = bit_3.PadLeft(3, '0');
                            return bit_1 + "-" + bit_2 + "-" + bit_3;
                        }
                        break;
                    case EnumMapScale.EnumMapScale_E_50000:
                        {
                            bit_3 = "";
                            decimal c10 = Math.Floor((c - 1) / 2) + 1;
                            decimal d10 = Math.Floor((d - 1) / 2) + 1;
                            decimal X10 = (c10 - 1) * 12 + (d10 - 1) + 1;      //10W
                            bit_3 = X10.ToString();
                            bit_3 = bit_3.PadLeft(3, '0');
                            //
                            bit_4 = "";
                            decimal X5 = (c - 2 * c10 + 1) * 2 + (d - 2 * d10 + 1) + 1; //旧图幅号对应的地图代码   5W
                            switch (X5.ToString())
                            {
                                case "1": bit_4 = "A"; break;
                                case "2": bit_4 = "B"; break;
                                case "3": bit_4 = "C"; break;
                                case "4": bit_4 = "D"; break;
                            }
                            return bit_1 + "-" + bit_2 + "-" + bit_3+"-"+bit_4;
                        }
                        break;
                    case EnumMapScale.EnumMapScale_F_25000:
                        {
                            decimal c5 = Math.Floor((c - 1) / 2) + 1;
                            decimal d5 = Math.Floor((d - 1) / 2) + 1;                            
                            bit_3 = "";
                            decimal c10 = Math.Floor((c5 - 1) / 2) + 1;
                            decimal d10 = Math.Floor((d5 - 1) / 2) + 1;
                            decimal X10 = (c10 - 1) * 12 + (d10 - 1) + 1;   //10W
                            bit_3 = X10.ToString();
                            bit_3 = bit_3.PadLeft(3, '0');
                            //
                            bit_4 = "";
                            decimal X5 = (c5 - 2 * c10 + 1) * 2 + (d5 - 2 * d10 + 1) + 1; //旧图幅号对应的地图代码  5W  by 10W
                            switch (X5.ToString())
                            {
                                case "1": bit_4 = "A"; break;
                                case "2": bit_4 = "B"; break;
                                case "3": bit_4 = "C"; break;
                                case "4": bit_4 = "D"; break;
                            }
                            decimal X2_5 = (c - 2*c5+1) * 2 + (d - 2*d5+1) + 1;  //旧图幅号对应的地图代码  2.5w  by 5W
                            bit_5 = X2_5.ToString();
                            // 
                            return bit_1 + "-" + bit_2 + "-" + bit_3 + "-" + bit_4+"-"+ bit_5;
                        }
                        break;
                    case EnumMapScale.EnumMapScale_G_10000:
                        {
                            bit_3 = "";
                            decimal c10 = Math.Floor((c - 1) / 8) + 1;
                            decimal d10 = Math.Floor((d - 1) / 8) + 1;
                            decimal X10 = (c10 - 1) * 12 + (d10 - 1) + 1;      //10W
                            bit_3 = X10.ToString();
                            bit_3 = bit_3.PadLeft(3, '0');
                            //
                            bit_4 = "";
                            decimal X1 = (c - 8 * c10 + 7) * 8 + (d - 8 * d10 + 1) +7; //旧图幅号对应的地图代码   1W
                            bit_4 = X1.ToString();
                            bit_4 = bit_4.PadLeft(2, '0');
                            return bit_1 + "-" + bit_2 + "-" + bit_3 + "-(" + bit_4+")";
                        }
                        break;
                    case EnumMapScale.EnumMapScale_H_5000:
                        {
                            //计算1w的新行,列号c1,d1
                            decimal c1 = Math.Floor((c - 1) / 2) + 1;
                            decimal d1 = Math.Floor((d - 1) / 2) + 1;
                            bit_3 = "";
                            decimal c10 = Math.Floor((c1 - 1) / 8) + 1;
                            decimal d10 = Math.Floor((d1 - 1) / 8) + 1;
                            decimal X10 = (c10 - 1) * 12 + (d10 - 1) + 1;      //10W
                            bit_3 = X10.ToString();
                            bit_3 = bit_3.PadLeft(3, '0');
                            //
                            bit_4 = "";
                            decimal X1 = (c1 - 8 * c10 + 7) * 8 + (d1 - 8 * d10 + 7) + 1; //旧图幅号对应的地图代码   1W  by 10W
                            bit_4 = X1.ToString();
                            bit_4 = bit_4.PadLeft(2, '0');
                            //5K
                            bit_5 = "";
                            decimal X5 = (c - 2*c1+1) * 2 + (d - 2*d1+1) + 1;     //旧图幅号对应的地图代码  5k   by 1W
                            switch (X5.ToString())
                            {
                                case "1": bit_5 = "a"; break;
                                case "2": bit_5 = "b"; break;
                                case "3": bit_5 = "c"; break;
                                case "4": bit_5 = "d"; break;
                            }
                            return bit_1 + "-" + bit_2 + "-" + bit_3 + "-(" + bit_4 + ")-"+ bit_5;
                        }
                        break;
                    case EnumMapScale.EnumMapScale_I_2000:
                        {
                            //计算1w的新行,列号c1,d1
                            decimal c1 = Math.Floor((c - 1) / 6) + 1;
                            decimal d1 = Math.Floor((d - 1) / 6) + 1;
                            bit_3 = "";
                            decimal c10 = Math.Floor((c1 - 1) / 8) + 1;
                            decimal d10 = Math.Floor((d1 - 1) / 8) + 1;
                            decimal X10 = (c10 - 1) * 12 + (d10 - 1) + 1;      //10W
                            bit_3 = X10.ToString();
                            bit_3 = bit_3.PadLeft(3, '0');
                            //
                            bit_4 = "";
                            decimal X1 = (c1 - 8 * c10 + 7) * 8 + (d1 - 8 * d10 + 1) + 7; //旧图幅号对应的地图代码   1W  by 10W
                            bit_4 = X1.ToString();
                            bit_4 = bit_4.PadLeft(2, '0');
                            //2K
                            bit_5 = "";
                            decimal X2 = (c - 6 * c1 + 5) * 6 + (d - 6 * d1 + 5) + 1;     //旧图幅号对应的地图代码  2k   by 1W
                            bit_5 = X2.ToString();
                            bit_5 = bit_5.PadLeft(2, '0');
                            return bit_1 + "-" + bit_2 + "-" + bit_3 + "-(" + bit_4 + ")-" + bit_5;
                        }
                        break;
                    default:
                        break;
                }                
                //
            }
            return "";            
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值