C# 基于GDAL读取影像数据并用四叉树存储_c# gdal获取影像有效范围-程序员宅基地

原谅,这是刚开始学C#学的代码,所以比较凌乱,但是是可以运行的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OSGeo.GDAL;
using System.IO;
using System.Data.OracleClient;
using System.Data.OleDb;
namespace GDALRead
{
    public struct point
    {
        public float x, y;
        public point(float x, float y)
        {
            this.x = x; this.y = y;
        }
    }
    public partial class Form1 : Form
    {
        int[,] _data = new int[16, 16];
        List<int[]> _QTree = new List<int[]>();
        int s = 0;
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Gdal.AllRegister();
            // string fileName = @"E:\img\jiangxueying.img";
            string fileName = @"E:\img\11.tif";
            Dataset DEMdata = Gdal.Open(fileName, Access.GA_ReadOnly);
            if (DEMdata == null)
            {
                MessageBox.Show("不能打开:" + fileName);
                return;
            }
            int size = DEMdata.RasterCount;//影像大小
            int xsize = DEMdata.RasterXSize;//行
            int ysize = DEMdata.RasterYSize;//列
            Band DEMband = DEMdata.GetRasterBand(1);//波段
            double val;
            int hasval;
            DEMband.GetMinimum(out val, out hasval);
            if (hasval != 0)
            {
                string strmin = val.ToString();
            }
            DEMband.GetMaximum(out val, out hasval);
            if (hasval != 0)
            {
                string strmax = val.ToString();
            }
            string strProjection = DEMdata.GetProjectionRef();//投影信息
            //输出图像的坐标和分辨率信息
            double[] adfGeoTransform = new double[6];
            DEMdata.GetGeoTransform(adfGeoTransform);
            string strOrigin = adfGeoTransform[0] + "," + adfGeoTransform[3];
            string strPixelsize = adfGeoTransform[1] + "," + adfGeoTransform[5];
            double a;
            DEMband.GetNoDataValue(out a, out hasval);

            int[] DEM = new int[xsize * ysize];
            DEMband.ReadRaster(0, 0, xsize, ysize, DEM, xsize, ysize, 0, 0);
            int t1 = 0;
            AllDEM = new int[xsize, ysize];
            for (int i = 0; i < xsize; i++)
            {
                for (int j = 0; j < ysize; j++)
                {
                    AllDEM[i, j] = DEM[t1];
                    t1++;
                }
            }
            //OpenFileDialog opF = new OpenFileDialog();
            //string[] lines = System.IO.File.ReadAllLines(@"E:\新建文本文档.txt", Encoding.Default);//读取文件
            //double[,] data = new double[lines.Length, lines[0].Split(',').Length];//将相应的数据存入数组中并赋值;
            //for (int i = 0; i < lines.Length; i++)
            //{//
            //for (int j = 0; j < lines[0].Split(',').Length; j++)
            //{
            //data[i, j] = double.Parse(lines[i].Split(',')[j]);
            //}
            //}
            int[,] element_data = element_array(AllDEM, 256);
            int[][,] child = new int[element_data.GetLength(0) * element_data.GetLength(1) / 256 / 256][,];
            int count = 0;
            string[][] all = new string[child.GetLength(0) * 256 * 256][];
            Point[][] p = depart(element_data, 256);
            string[][,] result = new string[child.GetLength(0)][,];
            string lll;
            for (int i = 0; i < child.GetLength(0); i++)
            {
                child[i] = index(element_data, p[i]);
                if (i == 132)
                    lll = "";
                result[i] = quadtree(child[i]);
                for (int j = 0; j < result[i].GetLength(0); j++)
                {
                    if (result[i][j, 0] == null && result[i][j, 1] == null || result[i][j, 1] == "0")
                        continue;
                    all[count] = new string[3];
                    all[count][0] = result[i][j, 0]; all[count][1] = result[i][j, 1]; all[count][2] = i.ToString();
                    count++;
                }
            }
            MessageBox.Show("数据获取完毕,四叉分成功");
        }

        计算morton值的方法
        //public int GetMorton(int row, int column)
        //{
        //    int i = 0;
        //    string c2 = "";
        //    string r = Convert.ToString(row, 2);
        //    string c = Convert.ToString(column, 2);
        //    if (r.Length > c.Length)
        //    {
        //        i = r.Length - c.Length;
        //        for (int a = 0; a < i; a++)
        //        {
        //            c2 = "0" + c2;
        //        }
        //        c = c2 + c;
        //    }
        //    else
        //    {
        //        i = c.Length - r.Length;
        //        for (int a = 0; a < i; a++)
        //        {
        //            c2 = "0" + c2;
        //        }
        //        r = c2 + r;
        //    }
        //    StringBuilder strBu = new StringBuilder();
        //    char[] rchar = r.ToCharArray();
        //    char[] cchar = c.ToCharArray();
        //    for (int j = 0; j < r.Length; j++)
        //    {
        //        strBu.Append(rchar[j]);
        //        strBu.Append(cchar[j]);
        //    }
        //    string result = strBu.ToString();
        //    int result10 = Convert.ToInt32(result, 2);
        //    return result10;
        //}
        //private void button2_Click(object sender, EventArgs e)
        //{ {
        //    //读取txt文件
    
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_30805761/article/details/79404904

智能推荐

vue eslint报错:Component name “index“ should always be multi-word.eslintvue/multi-word-component-names_"component name \"index\" should always be multi-w-程序员宅基地

文章浏览阅读2.3w次,点赞31次,收藏81次。Component name "index" should always be multi-word.eslintvue/multi-word-component-names_"component name \"index\" should always be multi-word"

页面跳转的两种实现方式:重定向与转发_重定向跳转-程序员宅基地

文章浏览阅读7.9k次,点赞6次,收藏15次。1、重定向客户端向服务器端发送一个请求servlet1,服务器端接收servlet1,servlet1执行完后调用了sendRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个servlet2请求,客户端收到这个请求后,立刻发出一个新的请求,去请求servlet2。此处两个请求一前一后,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。(服务器向._重定向跳转

xftp7要继续使用此程序,您必须应用最新的更新,100%已解决._xftp7 要继续使用此程序 您必须应用最新的-程序员宅基地

文章浏览阅读1.9w次,点赞42次,收藏56次。xftp7要继续使用此程序,您必须应用最新的更新,100%已解决.xshell7要继续使用此程序,您必须应用最新的更新,100%已解决._xftp7 要继续使用此程序 您必须应用最新的

有效解决SecureCRT错误:Hostname lookup failed: host not found-程序员宅基地

文章浏览阅读3w次,点赞7次,收藏12次。SecureCRT是一款方便用户在Windows环境下对Linux主机进行管理的软件,一般需要在windows系统上安装SecureCRT客户端,安装及破解过程可参考https://blog.csdn.net/xxujia/article/details/81348848(注意在运行注册机时应使用管理员权限)。相应地,在Linux主机上需要安装ssh2服务,在终端中输入命令:sudo apt-g..._hostname lookup failed: host not found

C#与雷赛运动控制卡的使用(二) - 轴控制系统_c# 运动控制卡编程-程序员宅基地

文章浏览阅读1.3k次,点赞29次,收藏9次。C#是一门面向对象的编程语言,所以在编写马达控制程序的时候也要有面向对象的思维,所以在此我们可以将马达看成是一类对象,而机台上的每个马达就是这个马达类的具体对象。一个简单的类大致包括了字段,属性和方法,需要创建一个马达类,首先得知道马达具备哪些基本的属性,而我们使用马达来实现哪些功能,怎么控制这个马达,就是一些方法。去年写过一篇关于C#实现马达运动控制卡编程的博客,很多小伙伴看了希望共享下代码,后来自己觉得写得不够完善就删掉了,这次准备重新写一篇完善点的,实现代码后续也会上传资源,觉得有用的可以去下载。_c# 运动控制卡编程

面向对象魔术方法_成员有 private 访问,但类有魔术方法 __get-程序员宅基地

文章浏览阅读61次。它们在特定的情况下被触发,都是以双下划线开头,你可以把它们理解为钩子,利用魔术方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法)。__set( $property, $value )` 方法用来设置私有属性, 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。当然,只需要在类里定义__isset()方法,就可以在对象外部利用isset()方法判断某个私有属性是否被设置了。如果参数是公有属性,那么可以利用isset()方法判断属性是否被设置;_成员有 private 访问,但类有魔术方法 __get

随便推点

图像噪声与去噪-程序员宅基地

文章浏览阅读3.4w次,点赞17次,收藏139次。图像的空域噪声以及二维降噪算法介绍1图像噪声的成因  图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质,这对后续图像的处理和图像视觉效应将产生不利影响。噪声种类很多,比如:电噪声,机械噪声,信道噪声和其他噪声。因此,为了抑制噪声,改善图像质量,便于更高层次的处理,必须对图像进行去噪预处理。2图像噪声的特征  图像噪声使得图像模糊,甚至淹没图像特征_图像噪声与去噪

Python Web 之Flask基础(一)_python flask修改了视图函数的函数名-程序员宅基地

文章浏览阅读536次,点赞4次,收藏4次。文章目录Flask 框架基础Flask 搭建创建虚拟环境安装 Flask测试Flask 的基本使用路由视图函数请求与响应请求响应Flask 框架基础Flask 搭建Flask 1.0 文档依赖当安装 Flask 时,以下配套软件会被自动安装。Werkzeug 用于实现 WSGI ,应用和服务之间的标准 Python 接口。Jinja 用于渲染页面的模板语言。MarkupSaf..._python flask修改了视图函数的函数名

学习3d建模达到什么水平能找到工作?次世代游戏建模需要学多久_次时代建模几月找工作合适-程序员宅基地

文章浏览阅读844次。作为从业7年+的游戏建模工作者,我经历过这个圈子里几乎所有类型的挫折和崩溃,过快的技术更迭造成现在游戏美术圈一个普遍的问题:人才出现巨大断层,各高校游戏美术类相关专业应届毕业生基本达不到同时期入行的最低需求,学生们发现自己刚毕业就失业了,这就是为什么你的老师告诉你们毕业也找不到工作的原因。3d建模学多久这个问题不是很好回答,谁才知道你的实力怎么样,努力的态度怎么样,如果你三天打鱼两天晒网,我估计一万年也学不会。如果你全力以赴认真的学,五六个月就能很好的玩转3D建模,当然如果你想达到大神级别的水平,还得在有_次时代建模几月找工作合适

ESP8266-01S与PC通过网络助手的测试的AT指令_at+cipstatus=4-程序员宅基地

文章浏览阅读3.5k次,点赞3次,收藏26次。这阵子在学esp8266+stm32的知识,从小白学起,一步一步记录着工具:TTL-usb,esp8266-01s,杜邦线,xcom串口助手如图:串口助手连线:接线的时候要注意接好,我一开始没有接好,芯片会发烫,电压选用3.3vTTL ESP8266 3.3V 3.3V TXD RX RXD TX GND GND 注..._at+cipstatus=4

ribbon基于接口配置超时_Spring cloud 超时及重试配置【ribbon及其它http client】-程序员宅基地

文章浏览阅读990次。开启重试在某些情况下是有问题的,比如当压力过大,一个实例停止响应时,路由将流量转到另一个实例,很有可能导致最终所有的实例全被压垮。说到底,断路器的其中一个作用就是防止故障或者压力扩散。用了retry,断路器就只有在该服务的所有实例都无法运作的情况下才能起作用。这种时候,断路器的形式更像是提供一种友好的错误信息,或者假装服务正常运行的假象给使用者。不用retry,仅使用负载均衡和熔断,就必须考虑到是...

java九大内置对象和四大作用域-程序员宅基地

文章浏览阅读2.5k次,点赞11次,收藏20次。Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。_九大内置对象