基于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

相关推荐
咔叽布吉28 分钟前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测
johnny23329 分钟前
《大模型应用开发极简入门》笔记
笔记·chatgpt
亦枫Leonlew32 分钟前
微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
笔记·数学·微积分·1024程序员节
小肥象不是小飞象35 分钟前
(六千字心得笔记)零基础C语言入门第八课——函数(上)
c语言·开发语言·笔记·1024程序员节
星LZX36 分钟前
WireShark入门学习笔记
笔记·学习·wireshark
努力变厉害的小超超3 小时前
ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染
笔记·鸿蒙
aloha_7897 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
dsywws8 小时前
Linux学习笔记之vim入门
linux·笔记·学习
A-超10 小时前
vue3展示pag格式动态图
笔记
u01015265811 小时前
STM32F103C8T6学习笔记2--LED流水灯与蜂鸣器
笔记·stm32·学习