您现在的位置是:首页 >学无止境 >.nc文件根据经纬度提取点上数值python网站首页学无止境

.nc文件根据经纬度提取点上数值python

清木! 2024-07-24 06:01:03
简介.nc文件根据经纬度提取点上数值python

.nc文件根据经纬度提取点上数值python

1、数据集

VOD Climate Archive (VODCA) 数据由维也纳工业大学提供(https://doi.org/
10.5281/zenodo.2575599)。VODCA是一种空间分辨率为0.25°的全球每日VOD产品,其
基于多个传感器 (SSM/I、TMI、AMSR-E、WINDSAT 和 AMSR2) 的 VOD 检索结果的
融合,使用AMSR-E作为缩放参考,通过累积分布函数匹配进行共同校准,创建了C波
段 (~6.9 GHz、2002.6—2018.12)、X 波段 (10.7 GHz、1997.12—2018.12) 和 Ku 波段
(~19 GHz、1987.7—2017.7) 的长期 VOD 数据集。
VOD数据集下载
在这里插入图片描述
可以看出来,这个数据是三维数据(time维、lat纬度、lon经度)。

2、代码部分

首先,我们加载一下刚刚下载好的数据

# 提取VOD数据
import pandas as pd
import xarray as xr
# 读取文件
filefullpath = r'G:/DATA/VOD/VODCA_C-band_2002-2018_v01.0.0/C-Band/2004/vodca_v01-0_C-band_2004-01-01.nc'
ds = xr.open_dataset(filefullpath)
print(ds)

在这里插入图片描述
然后,根据经纬度读取数据

# 需要查询的点
find_latindex = 47.28642  # 需要查询的纬度
find_lonindex = 7.73375   # 需要查询的经度

vod_tem = ds['vod'].values  # 读取VOD数据
lat = ds['lat'].values.tolist()  # 读取纬度lat,并且一定要转化为列表格式,因为后面所使用的函数不支持numpy或者其他格式
print("lat:
", lat)
lon = ds['lon'].values.tolist()  # 读取经度lon,并且一定要转化为列表格式,因为后面所使用的函数不支持numpy或者其他格式
print("lon:
", lon)

在这里插入图片描述
查询距离指定经纬度最近的格点的下标,并读取数据

# 查询距离指定经纬度最近的格点的下标
lat_index = lat.index(min(lat, key=lambda x: abs(x - find_latindex)))  # 找的是下标
lon_index = lon.index(min(lon, key=lambda x: abs(x - find_lonindex)))
print("lon_index:", lon_index)
print("lat_index:", lat_index)
# 读取数据
vod_select = vod_tem[:, lat_index, lon_index]
print("vod:", vod_select)
time = ds['time'].values

在这里插入图片描述
最后转化为DateForm并输出成csv

# 最后转化为DateForm并输出成csv
data = pd.DataFrame({'TIME': time, 'VOD': vod_select}, index=[0])
print(data)

在这里插入图片描述

3、完整代码

# 提取VOD数据
import pandas as pd
import xarray as xr
# 读取文件
filefullpath = r'G:/DATA/VOD/VODCA_C-band_2002-2018_v01.0.0/C-Band/2004/vodca_v01-0_C-band_2004-01-01.nc'
ds = xr.open_dataset(filefullpath)
# print(ds)

# 需要查询的点
find_latindex = 47.28642  # 需要查询的纬度
find_lonindex = 7.73375   # 需要查询的经度

vod_tem = ds['vod'].values  # 读取VOD数据
lat = ds['lat'].values.tolist()  # 读取纬度lat
# 并且一定要转化为列表格式,因为后面所使用的函数不支持numpy或者其他格式
# print("lat:
", lat)
lon = ds['lon'].values.tolist()  # 读取经度lon
# print("lon:
", lon)

# 查询距离指定经纬度最近的格点的下标
lat_index = lat.index(min(lat, key=lambda x: abs(x - find_latindex)))  # 找的是下标
lon_index = lon.index(min(lon, key=lambda x: abs(x - find_lonindex)))
# print("lon_index:", lon_index)
# print("lat_index:", lat_index)
# 读取数据
vod_select = vod_tem[:, lat_index, lon_index]
# print("vod:", vod_select)
time = ds['time'].values

# 最后转化为DateForm并输出成csv
data = pd.DataFrame({'TIME': time, 'VOD': vod_select}, index=[0])
print(data)

参考文章:https://blog.csdn.net/qq_44907989/article/details/128057413

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。