IDL学习笔记(五)MODIS数据(Grid)

IDL学习笔记(四)

正弦投影 是以 米 为单位的
经纬度网格 是以 度 为单位的
在这里插入图片描述
但是转换之后,不会一一对应,所以需要对中间空缺位置需要进行一个填补。

核心问题:

把一个点从一个空间参考系放到另一个空间参考系

对应的编程关键:

1.数组A的元素应该放到数组B的哪个位置?

2.数组B的行列数量?

3.数组B的空值如何填补?

MODIS Grid数据的重投影

1.对应的专业问题:

数组A的元素应该放到数组B的哪个位置投影

2.坐标与经纬度坐标的转换:

数组B的行列数量:经纬度格网的范围

3.数组B的空值如何填补:

移动窗口均值计算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先,确定,经纬度最值。(数组行列数:原图像包含的经纬度范围最值 ; 重投影结果分辨率设置)

重投影结果分辨率设置,不能比原来更细,因为这样的话,空缺会更多,将带来更大误差。

每个像元坐标从哪里来?
在这里插入图片描述
知道第一列坐标,那么第二列坐标 就是 第一列坐标 + 像元分辨率。所以其余坐标就可以利用像元分辨率进行 加减乘除 运算 得知。

像元分辨率没有提到,需要自己计算。利用左上角、右下角坐标,以及行数、列数,进行计算得到。
在这里插入图片描述
再找到,我们需要的“一行”信息,再定位到()取出里面的坐标信息。为什么不用strmid?因为()内的信息可能是不固定的,长度不唯一。

根据前面的关键字,通过strpos定位到起始位置和结束位置,获取总共子串长度,然后就可以用strsplit分割函数获取所需数值。

strsplit(ul_info, '=(,)', /extract)

1.'=(,)'只要遇到引号里的任何一个内容就把他分开
2./extract 如果需要提取内容,则输出的是分割的下标。所以需要提取信息的话,需要添加关键字。这时候,提取结果是一个 字符型 数组,里面包含坐标信息。

在这里插入图片描述

    sd_id = hdf_sd_start(file_list[file_i],/read)
    gindex = hdf_sd_attrfind(sd_id,'StructMetadata.0')
    hdf_sd_attrinfo, sd_id, gindex, data=metadata
    
    ;左上角坐标获取
    ul_start_pos = strpos(metadata,'UpperLeftPointMtrs')
    ul_end_pos = strpos(metadata,'LowerRightMtrs')
    ul_info = strmid(metadata,ul_start_pos, ul_end_pos-ul_start_pos)
    ul_info_spl = strsplit(ul_info,'=(,)',/extract) ; 加 /extract 才返回的是内容,而不是切割点的索引
    ul_prj_x = double(ul_info_spl[1])
    ul_prj_y = double(ul_info_spl[2])
    
    ;右下角坐标获取
    lr_start_pos = strpos(metadata,'LowerRightMtrs')
    lr_end_pos = strpos(metadata,'Projection')
    lr_info = strmid(metadata,lr_start_pos,le_end_pos - le_start_pos)
    lr_split = strsplit(lr_info,'=(,)',/extract) ;这里一开始忘添加关键字了,导致后面查报错查了很久
    lr_prj_x = double(lr_split[1])
    lr_prj_y = double(lr_split[2])

在这里插入图片描述

	;map_proj_inverse 用于将 投影坐标 转为 经纬度坐标
    sin_prj = map_proj_init('sinusoidal', /gctp, sphere_radius = 6371007.181,center_longitude=0.0,false_easting=0.0,false_northing=0.0)
    ;投影坐标参数,从数据里得知,
    geo_loc = map_proj_inverse(proj_x, proj_y, map_strcture = sin_prj); 进行坐标转换,需要知道原来的投影的坐标
    

在这里插入图片描述

在这里插入图片描述

 	lon_min = min
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值