• 大小: 40KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-16
  • 语言: C/C++
  • 标签: projection  c++  

资源简介

处理himawari 8的hsd数据,并进行等经纬度投影,生成反射率、亮温、太阳高度角、方位角、卫星高度角、方位角数据

资源截图

代码片段和文件信息

/* 本程序为日本Himawari-8卫星hsd格式数据经投影转换为LDF格式数据,并可用swap打开
 * 主要功能:能对圆盘分幅数据联合要求所有分幅文件在同一目录下,并将坐标转换为经纬度坐标
 * 如果要地形矫正将地形文件china.img放在执行时的当前目录,
 * 默认情况下投影区域为 经度70-150,纬度0-60范围,格点精度0.01度,默认处理通道为所提供文件的通道值,
 * 默认输出文件为将hsd文件的.DAT替换为.ldf
   用法:H8proj.exe [-dstwin LULON LULAT DX DY] [-size nx ny] [-bands xyz...] [-addsun] [-addsat] srcfile [dstfile]
 * 例子:1. H8proj.exe -dstwin 70 60 0.01 -0.01 -size 8000 6000 -bands 123 HS_H08_20150715_0130_B03_FLDK_R05_S0210.DAT H08_20150715_0130.img
        2. decodeHSD.exe HS_H08_20150715_0130_B03_FLDK_R05_S0210.DAT

 * 内存要求,因为程序在处理投影时,会自动打开投影区域内涉及的所有分幅文件,当选择区域较大时系统内存要较大
 * 浙江气候中心  张小伟  qq:51903418
 *
 *
 * 2015.7.16 修正计算亮温时的错误,还未测试,亮温计算是否正确
 * 2015.7.17 增加ldf格式输出,使输出结果可以在SWAP软件下打开
 * 2015.7.20 使用官方swap ldf文件头修正计算亮温时,公式中的波长单位错误
 * 2016.1.15 东华王新刚增加多通道处理,卫星天顶角层 ,多字节字符处理等功能
 * 2016.4.29 和卫星中心陈杰讨论,增加地形校准功能
 * 2016.5.3  将卫星天顶角的计算从原来的读取插值法换成直接计算法不同系统不同路径分割
 * 2016.8.2  修改路径处理中的bug,增加pack选项来适应hsd数据结构的对齐问题
 * 2016.10.17 增加太阳高度角计算部分,利用了hsd文件中的太阳位置,其值与普通天文计算公式位置有1-2%差异,
 *  还未确切差异的原因,欢迎赐教和讨论。
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#ifdef _MSC_VER
#include “stdafx.h“
#endif

using namespace std;

#if defined(WIN32) || defined(WIN64)
#define pathsplit “\\“
#else
#define pathsplit “/“
#endif

const double omega_e=1.00273790934; //solar day over sidereal day
const double pi=3.14159265358979323846;
const double r2d=180/pi;
const double d2r=pi/180;
const double Re=6378.135;
const double AU=1.49597870691E8; /* Astronomical unit - km (IAU 76) */

const double topdx=0.008333333333333333topdy=0.008333333333333333;
const double topulat=70.0topulon=70.0;
const int topnx=8400topny=8400;
const long topnn=topnx*topny;
int topflag=0;
short topdata[topnn];

double getHeight(const char *filedouble londouble lat){
FILE *fp;
int ij;
double h=0;

if(topflag==0){
if((fp=fopen(file“rb“))==NULL){
fprintf(stderr“can‘t open %s\n“file);
topflag=-1;
return 0; }
fread(topdatasizeof(short)topnnfp);
fclose(fp);
topflag=1;
}
if(topflag==-1) return 0;
j=(lon-topulon)/topdx+0.5;
i=(topulat-lat)/topdy+0.5;
if(i>=0 && i<8400 && j>=0 && j<8400){
if(topdata[i*8400+j]>0 && topdata[i*8400+j]<10000) h=topdata[i*8400+j]/1000.0;
}
return h;

}

string getFilePath(char* fullPath);
//#define DEBUG 1

/*****************************************************
 *头信息 普通版本128字节,扩展版本 128+1024 字节。
******************************************************/
typedef struct swapldf {
    /*0*/short wFileID ;// 2字节。文件标识 局地文件为“LA“ 植被 NV -- NDVI  植被 DV -- DVI 植被  RV -- RVI LST -- LS  SSY -- SS
    /*2*/short wSatelliteID;  // 2字节。 卫星标识 NOAA-14: 14 NOAA-12: 12 FY-1C:103 TERRA:1001
    /*4*/short wOrbitNo;            /* 2字节。 轨道号 */
    /*6*/short  wUporDown;            /*  2字节。升降轨标记 1: 升轨 0: 降轨 */
    

评论

共有 条评论