爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3583|回复: 2

请教各位大虾!C#读取卫星格点数据成功,重新写入后却无法显示!

[复制链接]

新浪微博达人勋

发表于 2015-5-18 08:49:44 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
读取卫星定量估测降水格点数据,如FY2F_PRE_001_OTG_20140901_0330.AWX,成功,但写入后,无法显示。
代码如下:
#region 读取卫星降水估计
        public void ReadQPE(string QPEfile)
        {         
            byte[] fHead = new byte[120];
            FileStream srQPE = new FileStream(QPEfile, FileMode.Open, FileAccess.Read);
            srQPE.Read(fHead, 0, 120);
            fileHead = fHead;
            int bytenumber = BitConverter.ToInt16(fHead, 50);
            int jizhun = BitConverter.ToInt16(fHead, 52);//格点数据基准值
            int bili = BitConverter.ToInt16(fHead, 54);//格点数据比例因子
            lng0 = BitConverter.ToInt16(fHead, 80)/100.0;//经度*100
            lat0 = BitConverter.ToInt16(fHead, 82)/100.0;//纬度*100
            int danwei = BitConverter.ToInt16(fHead, 86);//格距单位,0=0.01°,1=km
            int dx = BitConverter.ToInt16(fHead, 88);//横向格距
            int dy = BitConverter.ToInt16(fHead, 90);//纵向格距
            nx0 = BitConverter.ToInt16(fHead, 92);
            ny0 = BitConverter.ToInt16(fHead, 94);
            byte[] qpebyte = new byte[bytenumber];
            QPE = new double[nx0, ny0];//公共变量
            for (int j = 0; j <ny0; j++)
            {
                for (int i = 0; i < nx0; i++)
                {
                    srQPE.Read(qpebyte, 0, bytenumber);
                    QPE[i, j] = (BitConverter.ToInt16(qpebyte, 0)+jizhun)/bili;                    
                }
            }
            srQPE.Close();
        }
        #endregion
#region 写成AWX格式文件
            string fileName = "D:\\111.AWX";
            FileStream srQPF = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
            BinaryWriter bw=new BinaryWriter(srQPF);

            ReadFile writef = new ReadFile();//读取文件的类
            writef.ReadQPE(qpefile);//读取格点文件
            //写入文件头            
                bw.Write(writef.fileHead);
            int jizhun=BitConverter.ToInt16(writef.fileHead, 52);
            int bili = BitConverter.ToInt16(writef.fileHead, 54);
            //写入格点文件
           int nx =writef.QPE.GetLength(0);
            int ny = writef.QPE.GetLength(1);
            for (int j = 0; j < ny; j++)
            {
                for (int i = 0; i < nx; i++)
                {                    
                    short qpf=Convert.ToInt16(writef.QPE[i, j] * bili-jizhun);                    
                    bw.Write(qpf);
                }
            }
            bw.Close();
            srQPF.Close();

            #endregion

利用以上程序代码写出来的文件无法用micaps和meteoInfo软件显示,请哪位大侠指点指点,困扰已久!感激不尽!

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-18 16:19:17 | 显示全部楼层
已解决,谢谢!程序没有问题,是我把文件头少读了,造成数据读取出来本身就是错误的,再写入肯定是错的啦!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-8-11 11:40:02 | 显示全部楼层
不错学习下
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表