/*---------------------------------------------------------- [jaxamodis2img.c] A.Kondoh 2005 JAXA/MODISのSST(CHLA)データを抽出するプログラム 2バイト(signed short)をIntel用に変換 フラグ:雲=0(0)、陸域=-1(65535)、領域外=-2(65534) ()内はunsigned charの場合であるが、40℃の場合でも DNは5000であるので、signed charで良いと思われる ----------------------------------------------------------*/ #include #include #include #include #include #include #include #include /* 適当な大きな数字 */ #define MAX_BUFFER_SIZE 10000 /* バイト順を変更しながら処理するのでunsigned charで良い */ unsigned char buffer[MAX_BUFFER_SIZE]; void main(argc,argv) int argc; char *argv[]; { int number_of_pixels; int number_of_lines; int buffer_size; int fi,fo; int i,j,pixel2,line2; double ul_lat,ul_lon; /* 左上経度、左上緯度 */ double dx; /* 緯経度刻み */ double slope,offset; /* slope, offset */ unsigned char dummy; int year,month,day,utc_hour,utc_min; if(argc!=3){ printf("Usage: jaxamodis2img [input file name] [output file name]\n"); exit(-1); } /* ファイル名からピクセル、ライン数ほかを取得 */ sscanf(&argv[1][5],"%2d",&year); sscanf(&argv[1][7],"%2d",&month); sscanf(&argv[1][9],"%2d",&day); sscanf(&argv[1][11],"%2d",&utc_hour); sscanf(&argv[1][13],"%2d",&utc_min); sscanf(&argv[1][25],"%5d",&number_of_pixels); sscanf(&argv[1][31],"%5d",&number_of_lines); buffer_size=number_of_pixels*sizeof(short); if(buffer_size>MAX_BUFFER_SIZE){ fprintf(stderr,"Change MAX_BUFFER_SIZE.\n"); exit(-1); } if((fi=open(argv[1],O_RDONLY | O_BINARY))==-1){ fprintf(stderr,"Can't open %s.\n",argv[1]); exit(-1); } if((fo=open(argv[2],O_CREAT | O_TRUNC | O_RDWR | O_BINARY, S_IREAD | S_IWRITE))==-1){ fprintf(stderr,"Can't open %s.\n",argv[2]); } /* ヘッダー情報読み取り */ read(fi,buffer,buffer_size); sscanf(buffer,"%d %d %lf %lf %lf %lf %lf" ,&pixel2,&line2,&ul_lon,&ul_lat,&dx,&slope,&offset); printf("input pixel line year month day utc_hour utc_min ul_lon ul_lat int slope offset\n"); printf("%s ",argv[1]); printf("%6d ",pixel2); if(pixel2!=number_of_pixels){ fprintf(stderr,"Error in number_of_pixels.\n"); exit(-1); } printf("%6d ",line2); if(line2!=number_of_lines){ fprintf(stderr,"Error in number_of_lines.\n"); exit(-1); } printf("%2d ",year); printf("%2d ",month); printf("%2d ",day); printf("%2d ",utc_hour); printf("%2d ",utc_min); printf("%8.2lf ",ul_lon); printf("%8.2lf ",ul_lat); printf("%8.2lf ",dx); printf("%9.4lf ",slope); printf("%9.4lf\n",offset); /* 画素情報抽出 */ for(i=0;iIntel */ for(j=0;j