基于arcpro3.0.2的北斗网格生成简介

基于arcpro3.0.2的北斗网格生成简介

bash 复制代码
采用2000坐标系、可基于行政区范围
软件可生成第一级到第十级北斗网格
              经纬跨度                  等分         约赤道处距离
第一级 6X4度                      60 和A~V         660      km
第二级 30X30分                    12X8             55.66    km
第三级 15X10分                    2X3              27.83    km
第四级 1X1分                      15X10            1.85      km
第五级 4X4秒                      15X15            123.69  m
第六级 2X2秒                      2X2              61.84    m
第七级 1/4 X 1/4秒                8X8              7.73      m
第八级 1/32 X 1/32秒              8X8              0.97     m
第九级 1/256 X 1/256秒            8X8              12.0     cm
第十级 1/2048 X 1/2048秒          8X8              1.5       cm
csharp 复制代码
public static string GetNewBDBM(double B, double L, int Level)
{
    List<string> code = new List<string>();
    double pre_a = 0;   //上一级行号
    double pre_b = 0;   //上一级列号
    double pre_Q = 0;    //上一级确定角点纬度值
    double pre_Y = 0;    //上一级确定角点经度值
    double pre_dB = 0;   //上一级经差
    double pre_dL = 0;   //上一级纬差
    //本级变量
    double dB = 0, dL = 0;
    int a = 0, b = 0;
    double Q = 0, Y = 0;
    //BL点 转为度
    for (int i = 1; i <= Level; i++)
    {
        if (i == 1)
        {   //第一层  1:100万                    
            GetDetaB_detaL(i, ref dB, ref dL);  //获取本级经纬差值
            //                  
            string bit_1 = "N";   //我国位于北半球=N,   南半球=S
            if (B >= 0)
            {   //B=y
                bit_1 = "N";
            }
            else
            {
                bit_1 = "S";
            }
            //
            a = getInt(Math.Floor(Math.Abs(B) / dB)) + 1;    //商取整【B/4】+1                    
            b = getInt(Math.Floor(L / dL)) + 31;             //商取整【L/6】+31  
            //修正b值
            b = Math.Abs(b); 
            if (b<0) b = 1;
            if (b > 59) b = 60;
            //修正a值
            if (a > 22) a = 22;
            //
            string bit_23 = b.ToString().PadLeft(2, '0');    //补足2位01-60
            string bit_4 = Get100W_WeiD_bit_1(Math.Abs(a).ToString());
            //生成北斗码
            code.Add(bit_1 + bit_23 + bit_4);    //N45A
            //==记录历史行列号和确定角点经纬度坐标值
            pre_a = a;
            pre_b = b;
            pre_Q = 0;   //全球赤道0度点
            pre_Y = 0;   //全球赤道0度点
            pre_dB = dB;
            pre_dL = dL;
            //==
        }
        else if (i == 2)
        {
            GetDetaB_detaL(i, ref dB, ref dL);  //获取本级经纬差值

            //获取上一级网格层的确定角点经纬度坐标值
            Q = pre_Q + (pre_b - 31) * pre_dL;
            Y = pre_Y + (pre_a - 1) * pre_dB;
            //获取此点在本级网格层的行列号                  
            a = getInt((L - Q) / dL) + 1;
            b = getInt((B - Y) / dB) + 1;
            //生成北斗码
            code.Add(fixRowColNum15(a - 1));
            code.Add(fixRowColNum15(b - 1));
            //==记录历史行列号和确定角点经纬度坐标值
            pre_a = a;
            pre_b = b;
            pre_Q = Q;   //全球赤道0度点
            pre_Y = Y;   //全球赤道0度点
            pre_dB = dB;
            pre_dL = dL;
            //==
        }
        else if (i == 3)
        {
            GetDetaB_detaL(i, ref dB, ref dL);  //获取本级经纬差值

            //获取上一级网格层的确定角点经纬度坐标值
            Q = pre_Q + (pre_a - 1) * pre_dL;
            Y = pre_Y + (pre_b - 1) * pre_dB;
            //获取此点在本级网格层的行列号                  
            a = getInt((L - Q) / dL) + 1;
            b = getInt((B - Y) / dB) + 1;
            //生成北斗码  (Z序列)
            //code.Add(fixRowColNum15(a - 1));
            //code.Add(fixRowColNum15(b - 1));
            code.Add(fixRowColZorder(a, b));
            //==记录历史行列号和确定角点经纬度坐标值
            pre_a = a;
            pre_b = b;
            pre_Q = Q;   //全球赤道0度点
            pre_Y = Y;   //全球赤道0度点
            pre_dB = dB;
            pre_dL = dL;
            //==
        }
        else if (i >= 4 && i <= 5)
        {
            GetDetaB_detaL(i, ref dB, ref dL);  //获取本级经纬差值

            //获取上一级网格层的确定角点经纬度坐标值
            Q = pre_Q + (pre_a - 1) * pre_dL;
            Y = pre_Y + (pre_b - 1) * pre_dB;
            //获取此点在本级网格层的行列号                  
            a = getInt((L - Q) / dL) + 1;
            b = getInt((B - Y) / dB) + 1;
            //生成北斗码
            code.Add(fixRowColNum15(a - 1));
            code.Add(fixRowColNum15(b - 1));
            //==记录历史行列号和确定角点经纬度坐标值
            pre_a = a;
            pre_b = b;
            pre_Q = Q;   //全球赤道0度点
            pre_Y = Y;   //全球赤道0度点
            pre_dB = dB;
            pre_dL = dL;
            //==
        }
        else if (i == 6)
        {
            GetDetaB_detaL(i, ref dB, ref dL);  //获取本级经纬差值

            //获取上一级网格层的确定角点经纬度坐标值
            Q = pre_Q + (pre_a - 1) * pre_dL;
            Y = pre_Y + (pre_b - 1) * pre_dB;
            //获取此点在本级网格层的行列号                  
            a = getInt((L - Q) / dL) + 1;
            b = getInt((B - Y) / dB) + 1;
            //生成北斗码  (Z序列)
            //code.Add(fixRowColNum15(a - 1));
            //code.Add(fixRowColNum15(b - 1));
            code.Add(fixRowColZorder(a, b));
            //==记录历史行列号和确定角点经纬度坐标值
            pre_a = a;
            pre_b = b;
            pre_Q = Q;   //全球赤道0度点
            pre_Y = Y;   //全球赤道0度点
            pre_dB = dB;
            pre_dL = dL;
            //==
        }
        else if (i >= 7 && i <= 10)
        {
            GetDetaB_detaL(i, ref dB, ref dL);  //获取本级经纬差值

            //获取上一级网格层的确定角点经纬度坐标值
            Q = pre_Q + (pre_a - 1) * pre_dL;
            Y = pre_Y + (pre_b - 1) * pre_dB;
            //获取此点在本级网格层的行列号                  
            a = getInt((L - Q) / dL) + 1;
            b = getInt((B - Y) / dB) + 1;
            //生成北斗码
            code.Add(fixRowColNum15(a - 1));
            code.Add(fixRowColNum15(b - 1));
            //==记录历史行列号和确定角点经纬度坐标值
            pre_a = a;
            pre_b = b;
            pre_Q = Q;   //全球赤道0度点
            pre_Y = Y;   //全球赤道0度点
            pre_dB = dB;
            pre_dL = dL;
            //==
        }
    }
    string buf = "";
    for (int i = 0; i < code.Count; i++)
    {
        buf += code[i];
    }
    return buf;
}

本blog地址:https://blog.csdn.net/hsg77

相关推荐
YHPsophie3 小时前
AT3340-6T杭州中科微BDS定位授时板卡性能指标
经验分享·笔记·学习·车载系统·信息与通信
Pandaconda3 小时前
【C++ 面试 - 新特性】每日 3 题(六)
开发语言·c++·经验分享·笔记·后端·面试·职场和发展
手打猪大屁4 小时前
STM32——串口通信(发送/接收数据与中断函数应用)
经验分享·笔记·stm32·单片机·嵌入式硬件
贾saisai4 小时前
Xilinx系FPGA学习笔记(四)VIO、ISSP(Altera)及串口学习
笔记·学习·fpga开发
月夕花晨3744 小时前
C++学习笔记(13)
c++·笔记·学习
probably1215 小时前
学习记录之Java学习笔记3
java·笔记·学习
漆黑的莫莫6 小时前
经验笔记:前端堆栈分配
前端·笔记
Milo_K6 小时前
java学习笔记-IO流(韩顺平)
java·笔记·学习
GoppViper9 小时前
golang学习笔记03——gin框架的核心数据结构
笔记·学习·golang
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑10 小时前
苍穹外卖学习笔记(一)
java·笔记·学习·spring·kafka·tomcat·maven