使用python读取卫星测高数据并做相应的处理

1.首先遍历卫星数据的文件,挨个读取每个数据
def scaner_file(url):
    file = os.listdir(url)
    return file

2.读取数据主体代码

def read_data(url):
    file = scaner_file(url)
    num_count = 0 # 用来统计一下读取数据文件的个数
    for f in file:
        data_path = os.path.join(url,f)
        dst = Dataset(data_path, mode='r', format="netCDF4")
        lon = np.array(dst.variables['lon'][:])                           # 经度 np.array是转化成数组
        lat = np.array(dst.variables['lat'][:])                           # 维度
        # t2m = dst.variables['t2m'][:]
        time = np.array(dst.variables['time'][:])                         # 时间
        alt = np.array(dst.variables['alt'][:])                           # 轨道高
        range_heirht = np.array(dst.variables['range_ku'][:])                    # 卫星到湖面高
        dry_corr = np.array(dst.variables['model_dry_tropo_corr'][:])     # 干对流层延迟
        wet_corr = np.array(dst.variables['model_wet_tropo_corr'][:])     # 湿对流层延迟
        iono_corr = np.array(dst.variables['iono_corr_alt_ku'][:])        # 电离层延迟
        solid_tide_corr = np.array(dst.variables['solid_earth_tide'][:])  # 地球固体潮改正
        pole_tide_corr = np.array(dst.variables['pole_tide'][:])          # 极潮改正

3.进行下一步,筛选在研究区域的数据

        B_lon,B_lat = read_boundary()
        # 调用函数Inpolygon 判断在指定区域内或边界上的点,其中_in指明在内或边缘上的点,_on指明在边缘上的点。
        _in,_on = Inpolygon.inpolygon(lon,lat,B_lon,B_lat)
        # 用逻辑语句,判断是否完全在内部的点
        _in_not_on = _in & ~_on
        def get_in_range(list = None,item = ''):
            """
            作用是:返回在列表中完全在区域内部的点的索引号,返回的是一个列表
            """
            return [i for i in range(len(_in)) if list[i] == item]
        in_range_index = get_in_range(_in_not_on,1)

        def rest_in_range_data(l_data,l_in_index):
            """
            作用:利用在区域内部的数据,列表。
            """
            return [l_data[i] for i in l_in_index]

        lon_in = rest_in_range_data(lon,in_range_index)

4.进行粗差的如NaN值,还有进行3倍方差进行对粗差处理。

h_mean = s_h.mean()  # 均值
h_std = s_h.std()  # 标准差

statisticii = []  # 用来存放粗差的位置
elim_index = 0  # 记录粗差位置
for i in range(len(s_h)):
     if abs(s_h[i] - h_mean) > 3 * h_std:
         elim_index += 1
         statisticii.append(i)

4.进行按天求平均和按月求平均

5.在python处理结果如下,最大的优点就是比matlab快30-40倍

使用python读取卫星测高数据并做相应的处理_第1张图片

有问题,请各位读者及时告知,一起完善内容。

你可能感兴趣的:(python,开发语言)