李国春
随着高分辨率对地观测卫星发射的日益增多,对数据处理软件的要求也越来越高。通常每个系列卫星都有自己的数据特点并需要专门的处理软件,但卫星数量的增加为每种卫星单独设计软件的压力越来越大。本文介绍的一种处理方案旨在能够正射校正处理大多数的光学遥感卫星的观测数据。
将卫星运营部门发布的卫星数据处理成用户数据最重要的处理成本是正射校正部分。这里提供的处理方案可以快速无人工干预处理由有理式(RPC)参数描述的一级数据。
本文演示处理了几种卫星数据,更多类别的卫星(尤其是近年大量发射的新卫星)数据用户可以用本文程序试验处理,遇有问题可以及时反馈以便修正处理。
一、99脚本语言处理代码
1. 准备正射校正用DEM数据
Print("开始生成中国区 SRTM 90m DEM 数据...");
DWORD tc = GetTickCount();
//创建 DEM 数据,正射校正用///
double demGeoBox[4]; //排列依次为:最小纬度、最小经度、最大纬度和最大经度
longlong demHeight = 36000;
longlong demWidth = 42000;
short demBuffer[demHeight][demWidth];
double dbOrgLat = 46.0; //设置左上角位置的经纬度
double dbOrgLon = 95.0;
short defaltElv = 0.0;
double demPixSize = 5.0/6000.0; //SRTM90m = 0.0008333。ASTGTM2、3 DEM 为 0.00027778度/像元.pixsize = 1.0/3600.0;
DemSrtm90Buffer(demBuffer,dbOrgLat,dbOrgLon,demHeight,demWidth,defaltElv,demGeoBox);
double dmtm = (GetTickCount() - tc) / 1000.0;
Print("生成中国区 SRTM 90m DEM 数据用时 %f 秒。",dmtm);
这段代码从SRTM90读来高程数据,存放在DemSrtm90Buffer指向的缓存。数据左上角纬度46.0°N,经度95°E。东西向42000个像元,南北向36000个像元。每个像元5/6000°。这样根据经纬度位置能够定位到对应的高程。
正射校正用DEM数据可以使用SRTM90、ASTGDEM2、3等通用DEM,也可以使用用户自行定义的DEM数据,只需指定开始经纬度位置、像元大小和数据范围,并将数据预存到一个数据缓存中即可。
2. 选择待校正的数据集
//选择待进行正射校正的卫星数据文件,自动查找对应的RPC数据文件 ///
longlong width,height;
int bands,datatype;
STRING tifName = OpenFileDialog(TRUE,"*.tif;*.tiff");//打开一个tif文件
STRING rpcName = tifName - '.';
rpcName = rpcName + ".rpb";
if(!PathFileExists(rpcName))
{
rpcName = tifName - '.';