登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
按swan说明书如下内容读取雷达MCR数据:131格式经过数次修订,目前大多数数据仍未1.0格式,但是显示引擎已经能够解析2.0格式的数据,具体应用可以根据情况使用相应版本的格式,主要是从后面的Reserved中修改为对应版本的大小。保证文件头格式总长度1024个字节。 说明:(老版本文件头长256字节,蓝色字段在老版本中不存在,只在新版本中存在。新旧版本的判断在Flag[8]字段,如果内容是“SWAN”则是新版本,否则为老版本),站点设置一般供雷达用,也可用于其他,只有20个空位 char ZonName[12]; // diamond 131 12个字节 char DataName[38];//数据说明(例如 2008年5月19日雷达三维拼图)38个字节 char Flag[8]; // 文件标志,"swan" char Version[8]; // 数据版本号,"1.0" 目前为2.0 unsigned short int year;//2008 两个字节 unsigned short int month;//05 两个字节 unsigned short int day;//19 两个字节 unsigned short int hour;//14 两个字节 unsigned short int minute;//31 两个字节 unsigned short int interval ; //两个字节 unsigned short int XNumGrids;//1300 两个字节 unsigned short int YNumGrids;//800 两个字节 unsigned short int ZNumGrids;//20 两个字节 int RadarCount; //拼图雷达数 四个字节 float StartLon; //网格开始经度(左上角) 四个字节 float StartLat; //网格开始纬度(左上角) 四个字节 float CenterLon;//网格中心经度 四个字节 float CenterLat;//网格中心纬度 四个字节 float XReso; //经度方向分辨率四个字节 float YReso; //纬度方向分辨率四个字节 float ZhighGrids[40];//垂直方向的高度(单位km)数目根据ZnumGrids而得(最大40层)160个字节。 char RadarStationName[20][16]; //相关站点名称, 20*16字节 float RadarLongitude[20]; //相关站点所在经度,单位:度,4*20字节 float RadarLatitude[20]; //相关站点所在纬度,单位:度,4*20字节 float RadarAltitude[20]; //相关站点所在海拔高度,单位:米,4*20字节 unsigned char MosaicFlag[20]; //该相关站点数据是否包含在本次拼图中,未包含:0,包含:1, 20字节 //数据类型定义,版本号为.=1.5 short m_iDataType; //0-unsigned char 1-char 2-unsigned short 3-short 4 (数据类型是什么意思?) //每一层的向量数,版本=2.0 short m_iLevelDimension; char Reserved[168]; 接下来是数据块,从底层到高层进行排列共ZnumGrids层。一个字节存储一个数据,值的范围0-255,2*dBZ+66等于该字节的值。每层的数据从起始点(左上角)开始,按维向(纬度y)减小写每行的经向(经度x增大)数据。 具体数据的记录值约定: (20层?没有数据?,雷达站高度是m?) 组合反射率、CAPPI率数据值为单字节,范围0-255,2*dBZ+66等于该字节的值。回波顶高、垂直液态水含量、垂直液态水含量密度、一小估算降水等数据为两字节整数(short int),回波顶高单位为0.1 km,垂直液态水含量单位为0.1 kg/m2,垂直液态水含量密度单位为0.1kg/m3,一小估算降水单位为0.1 mm,范围0-203(大于203的全部等于203)每层的数据从起始点(左上角)开始,按维向(纬度y)减小写每行的经向(经度x增大)数据。其他产品存储的必须为实际值,存储和实际值之间不得再有转换的公式。(排列20层?每层nXm个?) 我先读取了前面1024个字节,属于文件头和经纬度等信息部分,因为雷达拼图MCR只有一层数据,所以我就直接进行循环,每个网格循环的赋值是这样的(PYTHON代码): for i in range(700): for j in range(800): jing0=114.00+j*0.01 wei0=29.00-i*0.01-0.01 jing0="%.2f" % jing0 wei0="%.2f" % wei0 tstr=str(jing0)+','+str(wei0) zx=int(struct.unpack('b',infile.read(1))[0]) s=(zx-66)/2 if s<=0: s=0 a[tstr]=s 但是读取完毕后,我在arcgis上展示比较时,发现趋势上和局里给出的回波图基本位置是一致的,但是数值大小却差很多。 局里信息网给的回波最大值在50+了,可是我的代码不管哪个时段的回波最大值,基本都是30.5,错在哪里呢?????? 或者有谁能告诉我swan的雷达拼图具体要怎么读取数据呢? 先感谢大家了。
|