gribtomatlab.c

来自「麻省理工学院的人工智能工具箱,很珍贵,希望对大家有用!」· C语言 代码 · 共 319 行

C
319
字号
#include "./readmessage.h"mxArray *AssignMessToMatlab(MessageStruct Mess){	mxArray *MessMatlab;	int nDimsMess,nFieldsMess;	int dimsMess[2];	const char *FieldNamesMess[]={		"PDS","GDS","BMS","BDS"	};	nFieldsMess=4;	nDimsMess=2;	dimsMess[0]=1;	dimsMess[1]=1;	MessMatlab=mxCreateStructArray(nDimsMess,dimsMess,nFieldsMess,FieldNamesMess);	mxSetFieldByNumber(MessMatlab,0,0,AssignPDSToMatlab(Mess.pds));	mxSetFieldByNumber(MessMatlab,0,1,AssignGDSToMatlab(Mess.gds));	mxSetFieldByNumber(MessMatlab,0,2,AssignBMSToMatlab(Mess.bms));	mxSetFieldByNumber(MessMatlab,0,3,AssignBDSToMatlab(Mess.bdsHead));		return MessMatlab;}mxArray *AssignPDSToMatlab(PDS_INPUT PDS){	mxArray *PDSMatlab;	int nDimsPDS,nFieldsPDS;	int dimsPDS[2];	const char *FieldNamesPDS[]={		"GRIBEdition","Length","ParameterTable","Center","Process",		"GridId","GDSBMSFlag","Parameter","TypeLevel","Height1","Height2",		"Year","Month","Day","Hour","Minute","ForecastUnit","PeriodTime","TimeInterval",		"TimeRange","TimeRangeMiss","TimeRangeIncl","Century","ScaleFactor",		"SubTableCenter","Seconds","TrackId","SubTableParemeter","SubTableVersion",		"Class","Type","Stream","Version","Number","EnsembleSize","SystemNumber","MethodNumber","TotalSize"	};	nFieldsPDS=38;	nDimsPDS=2;	dimsPDS[0]=1;	dimsPDS[1]=1;	PDSMatlab=mxCreateStructArray(nDimsPDS,dimsPDS,nFieldsPDS,FieldNamesPDS);	mxSetFieldByNumber(PDSMatlab,0,0,ushortTomxArray(PDS.usEd_num));	mxSetFieldByNumber(PDSMatlab,0,1,ushortTomxArray(PDS.uslength));	mxSetFieldByNumber(PDSMatlab,0,2,ushortTomxArray(PDS.usParm_tbl));	mxSetFieldByNumber(PDSMatlab,0,3,ushortTomxArray(PDS.usCenter_id));	mxSetFieldByNumber(PDSMatlab,0,4,ushortTomxArray(PDS.usProc_id));	mxSetFieldByNumber(PDSMatlab,0,5,ushortTomxArray(PDS.usGrid_id));	mxSetFieldByNumber(PDSMatlab,0,6,ushortTomxArray(PDS.usGds_bms_id));	mxSetFieldByNumber(PDSMatlab,0,7,ushortTomxArray(PDS.usParm_id));	mxSetFieldByNumber(PDSMatlab,0,8,ushortTomxArray(PDS.usLevel_id));	mxSetFieldByNumber(PDSMatlab,0,9,ushortTomxArray(PDS.usHeight1));	mxSetFieldByNumber(PDSMatlab,0,10,ushortTomxArray(PDS.usHeight2));	mxSetFieldByNumber(PDSMatlab,0,11,ushortTomxArray(PDS.usYear));	mxSetFieldByNumber(PDSMatlab,0,12,ushortTomxArray(PDS.usMonth));	mxSetFieldByNumber(PDSMatlab,0,13,ushortTomxArray(PDS.usDay));	mxSetFieldByNumber(PDSMatlab,0,14,ushortTomxArray(PDS.usHour));	mxSetFieldByNumber(PDSMatlab,0,15,ushortTomxArray(PDS.usMinute));	mxSetFieldByNumber(PDSMatlab,0,16,ushortTomxArray(PDS.usFcst_unit_id));	mxSetFieldByNumber(PDSMatlab,0,17,ushortTomxArray(PDS.usP1));	mxSetFieldByNumber(PDSMatlab,0,18,ushortTomxArray(PDS.usP2));	mxSetFieldByNumber(PDSMatlab,0,19,ushortTomxArray(PDS.usTime_range));	mxSetFieldByNumber(PDSMatlab,0,20,ushortTomxArray(PDS.usTime_range_avg));	mxSetFieldByNumber(PDSMatlab,0,21,ushortTomxArray(PDS.usTime_range_mis));	mxSetFieldByNumber(PDSMatlab,0,22,ushortTomxArray(PDS.usCentury));	mxSetFieldByNumber(PDSMatlab,0,23,shortTomxArray(PDS.sDec_sc_fctr));	mxSetFieldByNumber(PDSMatlab,0,24,ushortTomxArray(PDS.usCenter_sub));	mxSetFieldByNumber(PDSMatlab,0,25,ushortTomxArray(PDS.usSecond));	mxSetFieldByNumber(PDSMatlab,0,26,ushortTomxArray(PDS.usTrack_num));	mxSetFieldByNumber(PDSMatlab,0,27,ushortTomxArray(PDS.usParm_sub));	mxSetFieldByNumber(PDSMatlab,0,28,ushortTomxArray(PDS.usSub_tbl));	mxSetFieldByNumber(PDSMatlab,0,29,ushortTomxArray(PDS.ecClass));	mxSetFieldByNumber(PDSMatlab,0,30,ushortTomxArray(PDS.ecType));	mxSetFieldByNumber(PDSMatlab,0,31,ushortTomxArray(PDS.ecStream));	mxSetFieldByNumber(PDSMatlab,0,32,mxCreateString(PDS.ecVersion));	mxSetFieldByNumber(PDSMatlab,0,33,ushortTomxArray(PDS.ecNumber));	mxSetFieldByNumber(PDSMatlab,0,34,ushortTomxArray(PDS.ecEnsembleSize));	mxSetFieldByNumber(PDSMatlab,0,35,ushortTomxArray(PDS.ecSystemNumber));	mxSetFieldByNumber(PDSMatlab,0,36,ushortTomxArray(PDS.ecMethodNumber));	mxSetFieldByNumber(PDSMatlab,0,37,ulongTomxArray(PDS.ulMess_Size));		return PDSMatlab; }mxArray *AssignBMSToMatlab(BMS_INPUT BMS){	mxArray *BMSMatlab;	int nDimsBMS,nFieldsBMS;	int dimsBMS[2];	const char *FieldNamesBMS[]={		"Length","UnusedBits","BMSId","BitsPresent","Bitmap"	};	nFieldsBMS=5;	nDimsBMS=2;	dimsBMS[0]=1;	dimsBMS[1]=1;	BMSMatlab=mxCreateStructArray(nDimsBMS,dimsBMS,nFieldsBMS,FieldNamesBMS);	mxSetFieldByNumber(BMSMatlab,0,0,ushortTomxArray(BMS.uslength));	mxSetFieldByNumber(BMSMatlab,0,1,ushortTomxArray(BMS.usUnused_bits));	mxSetFieldByNumber(BMSMatlab,0,2,ushortTomxArray(BMS.usBMS_id));	mxSetFieldByNumber(BMSMatlab,0,3,ulongTomxArray(BMS.ulbits_set));	return BMSMatlab; }mxArray *AssignBDSToMatlab(BDS_HEAD_INPUT BDS){	mxArray *BDSMatlab;	int nDimsBDS,nFieldsBDS;	int dimsBDS[2];	const char *FieldNamesBDS[]={		"Length","BDSFlag","BinaryScaleFactor","MinimunValue","BitPackNum",		"GridSize","PackNull"	};	nFieldsBDS=7;	nDimsBDS=2;	dimsBDS[0]=1;	dimsBDS[1]=1;	BDSMatlab=mxCreateStructArray(nDimsBDS,dimsBDS,nFieldsBDS,FieldNamesBDS);	mxSetFieldByNumber(BDSMatlab,0,0,ulongTomxArray(BDS.length));	mxSetFieldByNumber(BDSMatlab,0,1,ushortTomxArray(BDS.usBDS_flag));	mxSetFieldByNumber(BDSMatlab,0,2,intTomxArray(BDS.Bin_sc_fctr));	mxSetFieldByNumber(BDSMatlab,0,3,floatTomxArray(BDS.fReference));	mxSetFieldByNumber(BDSMatlab,0,4,ushortTomxArray(BDS.usBit_pack_num));	mxSetFieldByNumber(BDSMatlab,0,5,ulongTomxArray(BDS.ulGrid_size));	mxSetFieldByNumber(BDSMatlab,0,6,floatTomxArray(BDS.fPack_null));		return BDSMatlab; }mxArray *AssignGDSToMatlab(grid_desc_sec GDS){	mxArray *GDSMatlab;	int nDimsGDS,nFieldsGDS;	int dimsGDS[2];	const char *FieldNamesGDS[]={		"Head","LatLon","Lambert","Polar","Mercator","SpaceView"		};	nFieldsGDS=6;	nDimsGDS=2;	dimsGDS[0]=1;	dimsGDS[1]=1;	GDSMatlab=mxCreateStructArray(nDimsGDS,dimsGDS,nFieldsGDS,FieldNamesGDS);	mxSetFieldByNumber(GDSMatlab,0,0,AssignGDSHeadToMatlab(GDS.head));	mxSetFieldByNumber(GDSMatlab,0,1,AssignGDSLatLonToMatlab(GDS.llg));	mxSetFieldByNumber(GDSMatlab,0,2,AssignGDSLambertToMatlab(GDS.lam));	mxSetFieldByNumber(GDSMatlab,0,3,AssignGDSPolarToMatlab(GDS.pol));	mxSetFieldByNumber(GDSMatlab,0,4,AssignGDSMercatorToMatlab(GDS.merc));	mxSetFieldByNumber(GDSMatlab,0,5,AssignGDSSpaceViewToMatlab(GDS.svw));	return GDSMatlab;}mxArray *AssignGDSHeadToMatlab(GDS_HEAD_INPUT GDSHead){	mxArray *GDSHeadMatlab;	int nDimsGDSHead,nFieldsGDSHead;	int dimsGDSHead[2];	const char *FieldNamesGDSHead[]={		"NumberVertical","PVPLLocation","DataType","Length"	};	nFieldsGDSHead=4;	nDimsGDSHead=2;	dimsGDSHead[0]=1;	dimsGDSHead[1]=1;	GDSHeadMatlab=mxCreateStructArray(nDimsGDSHead,dimsGDSHead,nFieldsGDSHead,FieldNamesGDSHead);	mxSetFieldByNumber(GDSHeadMatlab,0,0,ushortTomxArray(GDSHead.usNum_v));	mxSetFieldByNumber(GDSHeadMatlab,0,1,ushortTomxArray(GDSHead.usPl_Pv));	mxSetFieldByNumber(GDSHeadMatlab,0,2,ushortTomxArray(GDSHead.usData_type));	mxSetFieldByNumber(GDSHeadMatlab,0,3,ushortTomxArray(GDSHead.uslength));	return GDSHeadMatlab;}mxArray *AssignGDSLatLonToMatlab(GDS_LATLON_INPUT GDSLatLon){	mxArray *GDSLatLonMatlab;	int nDimsGDSLatLon,nFieldsGDSLatLon;	int dimsGDSLatLon[2];	const char *FieldNamesGDSLatLon[]={		"DataType","Ni","Nj","Lat1","Lon1","ResolutionFlag","Lat2","Lon2",		"Di","Dj","ScanMode","LatSouthPole","LonSouthPole","Rotated",		"LatPoleStretch","LonPoleStretch","StretchFactor",	};	nFieldsGDSLatLon=17;	nDimsGDSLatLon=2;	dimsGDSLatLon[0]=1;	dimsGDSLatLon[1]=1;	GDSLatLonMatlab=mxCreateStructArray(nDimsGDSLatLon,dimsGDSLatLon,nFieldsGDSLatLon,FieldNamesGDSLatLon);	mxSetFieldByNumber(GDSLatLonMatlab,0,0,ushortTomxArray(GDSLatLon.usData_type));	mxSetFieldByNumber(GDSLatLonMatlab,0,1,intTomxArray(GDSLatLon.usNi));	mxSetFieldByNumber(GDSLatLonMatlab,0,2,intTomxArray(GDSLatLon.usNj));	mxSetFieldByNumber(GDSLatLonMatlab,0,3,longTomxArray(GDSLatLon.lLat1));	mxSetFieldByNumber(GDSLatLonMatlab,0,4,longTomxArray(GDSLatLon.lLon1));	mxSetFieldByNumber(GDSLatLonMatlab,0,5,ushortTomxArray(GDSLatLon.usRes_flag));	mxSetFieldByNumber(GDSLatLonMatlab,0,6,longTomxArray(GDSLatLon.lLat2));	mxSetFieldByNumber(GDSLatLonMatlab,0,7,longTomxArray(GDSLatLon.lLon2));	mxSetFieldByNumber(GDSLatLonMatlab,0,8,intTomxArray(GDSLatLon.iDi));	mxSetFieldByNumber(GDSLatLonMatlab,0,9,intTomxArray(GDSLatLon.iDj));	mxSetFieldByNumber(GDSLatLonMatlab,0,10,ushortTomxArray(GDSLatLon.usScan_mode));	mxSetFieldByNumber(GDSLatLonMatlab,0,11,longTomxArray(GDSLatLon.lLat_southpole));	mxSetFieldByNumber(GDSLatLonMatlab,0,12,longTomxArray(GDSLatLon.lLon_southpole));	mxSetFieldByNumber(GDSLatLonMatlab,0,13,longTomxArray(GDSLatLon.lRotate));	mxSetFieldByNumber(GDSLatLonMatlab,0,14,longTomxArray(GDSLatLon.lPole_lat));	mxSetFieldByNumber(GDSLatLonMatlab,0,15,longTomxArray(GDSLatLon.lPole_lon));	mxSetFieldByNumber(GDSLatLonMatlab,0,16,longTomxArray(GDSLatLon.lStretch));		return GDSLatLonMatlab;}mxArray *AssignGDSLambertToMatlab(GDS_LAM_INPUT GDSLambert){	mxArray *GDSLambertMatlab;	int nDimsGDSLambert,nFieldsGDSLambert;	int dimsGDSLambert[2];	const char *FieldNamesGDSLambert[]={		"DataType","Nx","Ny","Lat1","Lon1","ResolutionFlag","LongOriented",		"Dx","Dy","ProjectionCenterFlag","ScanMode","LatCut1","LatCut2",		"LatSouthPole","LonSouthPole"	};	nFieldsGDSLambert=15;	nDimsGDSLambert=2;	dimsGDSLambert[0]=1;	dimsGDSLambert[1]=1;	GDSLambertMatlab=mxCreateStructArray(nDimsGDSLambert,dimsGDSLambert,nFieldsGDSLambert,FieldNamesGDSLambert);	return GDSLambertMatlab;}mxArray *AssignGDSPolarToMatlab(GDS_PS_INPUT GDSPolar){	mxArray *GDSPolarMatlab;	int nDimsGDSPolar,nFieldsGDSPolar;	int dimsGDSPolar[2];	const char *FieldNamesGDSPolar[]={		"DataType","Nx","Ny","Lat1","Lon1","ResolutionFlag","LongOriented",		"Dx","Dy","ProjectionCenterFlag","ScanMode"			};	nFieldsGDSPolar=11;	nDimsGDSPolar=2;	dimsGDSPolar[0]=1;	dimsGDSPolar[1]=1;	GDSPolarMatlab=mxCreateStructArray(nDimsGDSPolar,dimsGDSPolar,nFieldsGDSPolar,FieldNamesGDSPolar);	return GDSPolarMatlab;}mxArray *AssignGDSMercatorToMatlab(mercator GDSMercator){	mxArray *GDSMercatorMatlab;	int nDimsGDSMercator,nFieldsGDSMercator;	int dimsGDSMercator[2];	const char *FieldNamesGDSMercator[]={		"Ni","Nj","Lat1","Lon1","ResolutionFlag","Lat2","Lon2",		"LatIntersection","Di","Dj","ScanMode"	};	nFieldsGDSMercator=11;	nDimsGDSMercator=2;	dimsGDSMercator[0]=1;	dimsGDSMercator[1]=1;	GDSMercatorMatlab=mxCreateStructArray(nDimsGDSMercator,dimsGDSMercator,nFieldsGDSMercator,FieldNamesGDSMercator);	return GDSMercatorMatlab;}mxArray *AssignGDSSpaceViewToMatlab(space_view GDSSpaceView){	mxArray *GDSSpaceViewMatlab;	int nDimsGDSSpaceView,nFieldsGDSSpaceView;	int dimsGDSSpaceView[2];	const char *FieldNamesGDSSpaceView[]={		"Ni","Nj","Lat1","Lon1","ResolutionFlag","DiameterX","DiameterY",		"XSubSatP","YSubSatP","Orientation","Altitude","iXo","iYo"	};	nFieldsGDSSpaceView=13;	nDimsGDSSpaceView=2;	dimsGDSSpaceView[0]=1;	dimsGDSSpaceView[1]=1;	GDSSpaceViewMatlab=mxCreateStructArray(nDimsGDSSpaceView,dimsGDSSpaceView,nFieldsGDSSpaceView,FieldNamesGDSSpaceView);	return GDSSpaceViewMatlab;}mxArray *ushortTomxArray(unsigned short in){	mxArray *out;	double *dum;	int d=1;	out=mxCreateNumericArray(1,&d,mxDOUBLE_CLASS,mxREAL);	dum=mxGetPr(out);	dum[0]=(double)in;	return out;}mxArray *uintTomxArray(unsigned int in){	mxArray *out;	double *dum;	int d=1;	out=mxCreateNumericArray(1,&d,mxDOUBLE_CLASS,mxREAL);	dum=mxGetPr(out);	dum[0]=(double)in;	return out;}mxArray *ulongTomxArray(unsigned long in){	mxArray *out;	double *dum;	int d=1;	out=mxCreateNumericArray(1,&d,mxDOUBLE_CLASS,mxREAL);	dum=mxGetPr(out);	dum[0]=(double)in;	return out;}mxArray *shortTomxArray(short in){	mxArray *out;	double *dum;	int d=1;	out=mxCreateNumericArray(1,&d,mxDOUBLE_CLASS,mxREAL);	dum=mxGetPr(out);	dum[0]=(double)in;	return out;}mxArray *intTomxArray(int in){	mxArray *out;	double *dum;	int d=1;	out=mxCreateNumericArray(1,&d,mxDOUBLE_CLASS,mxREAL);	dum=mxGetPr(out);	dum[0]=(double)in;	return out;}mxArray *longTomxArray(long in){	mxArray *out;	double *dum;	int d=1;	out=mxCreateNumericArray(1,&d,mxDOUBLE_CLASS,mxREAL);	dum=mxGetPr(out);	dum[0]=(double)in;	return out;}mxArray *floatTomxArray(float in){	mxArray *out;	double *dum;	int d=1;	out=mxCreateNumericArray(1,&d,mxDOUBLE_CLASS,mxREAL);	dum=mxGetPr(out);	dum[0]=(double)in;	return out;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?