Python读取.nc数据并提取指定时间、经纬度维度对应的变量数值

这篇具有很好参考价值的文章主要介绍了Python读取.nc数据并提取指定时间、经纬度维度对应的变量数值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  本文介绍基于Python语言的netCDF4库,读取.nc格式的数据文件,并提取指定维(时间、经度与纬度)下的变量数据的方法。

  我们之前介绍过.nc格式的数据,其是NetCDF(Network Common Data Form)文件的扩展名,是一种常用的科学数据存储格式,多用于存储科学和工程领域的大型数据集。同时,在我们之前的文章Python批量读取大量nc格式文件并导出全部时间信息(https://blog.csdn.net/zhebushibiaoshifu/article/details/135331417)中,就介绍过基于netCDF4库,对一个文件夹下大量.nc格式数据文件的某一维的信息加以提取的方法。而在本文中,我们则是同样基于netCDF4库,读取.nc文件,并提取指定Dimensions,也就相当于是自变量)下的变量Variables,也就相当于是因变量)的具体数值。

  首先,我们需要配置一下netCDF4库,具体配置方法大家可以参考文章Anaconda下Python中h5py与netCDF4模块下载与安装方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/120553597)。

  随后,本文所需代码如下。

# -*- coding: utf-8 -*-
"""
Created on Thu Feb 22 21:41:52 2024

@author: fkxxgis
"""

import netCDF4 as nc

nc_path = r"F:\Data_Reflectance_Rec\soil_1\2020_01.nc"
nc_data = nc.Dataset(nc_path)
print(nc_data)
time_value = nc_data.variables["time"][:]
longitude_value = nc_data.variables["lon"][:]
latitude_value = nc_data.variables["lat"][:]

# 第一种需求
time_need = 0
nc_value_1 = nc_data.variables["swvl1"][time_need, : , : ]

# 第二种需求
longitude_need = 106.467
latitude_need = 36.817
longitude_nc = (abs(longitude_value - longitude_need)).argmin()
latitude_nc = (abs(latitude_value - latitude_need)).argmin()
nc_value_2 = nc_data.variables["swvl1"][time_need, latitude_nc, longitude_nc]

  其中,我们首先导入netCDF4库,并指定要读取的.nc格式数据文件的路径nc_path;随后,使用nc.Dataset()打开这一文件,并将返回的Dataset对象存储在nc_data变量中;紧接着,通过print()打印nc_data,这将显示要读取的.nc格式数据文件的基本信息,如变量、维、属性等——这里具体打印出来的情况如下图所示。

python读取特定纬度nc文件,GIS数据获取整理,遥感处理与应用,Python学习与应用,Python,NC数据,NetCDF,.nc格式,气象数据,NC数据读取,维度

  其中,在上图我们需要重点关注紫色框内的内容。首先,在dimensions中,我们可以看到所有的;我这里的.nc格式数据是一个表示气象的数据,所以文件中的依次就是时间、纬度与经度;随后,在variables中,我们可以看到所有的数据变量(这里的数据变量是包含了维、变量与其他参数)——其中我们重点观察数据中的因变量(也就是上图中的swvl1),需要留意一下其后不同维排序顺序,在后面我们按照提取变量数据的时候会用到。

  回到前述代码的介绍中。通过前面print()打印出来的nc_data信息,我们知道了这个.nc数据的,此时我们可以将这几个也打印出来看看。例如,time_value = nc_data.variables["time"][:]就表示将时间这个打印出来,相当于获取了全部的时间节点。

  再接下来,我们即可开始按照来提取变量。为了方便,我们就以这个.nc文件的时间维中的第一个节点对应的数据(也就是第一景数据)为例来介绍;因此,我们先将time_need设置为0,表示读取第一个时间节点的数据。在这里,我们给出了2种按照来提取变量的需求。

  首先,是第一种需求,也就是time_need = 0这一行代码的下一行。nc_data.variables["swvl1"]表示这个.nc文件中读取名为swvl1的变量的值,而后面的[time_need, :, :]表示选择指定时间下的所有经度和纬度位置的值。这些值将被存储在nc_value_1变量中,也就是说这个nc_value_1变量相当于就是当前这个.nc文件的第一景数据(时间节点排在第一位的数据)。

  其次,是第二种需求。前面我们提取了指定时间维下的所有经度和纬度位置的值,那么现在就更进一步,提取指定时间维度、经度维度以及纬度维度的数据(相当于就是从前面的一景数据变成了一个像元的数据)。首先,我们指定一个处于.nc文件成像范围内的目标经度longitude_need和目标纬度latitude_need,并使用argmin()函数找到目标经、纬度值与文件中经度、纬度的数据值最接近的索引值——即longitude_nclatitude_nc。最后,即可使用nc_data.variables["swvl1"][time_need, latitude_nc, longitude_nc]来获取特定时间、经度和纬度位置的值,并将结果存储在nc_value_2变量中。

  这里提一句——为什么需要用argmin()函数呢?这个是因为,我们在实际情况中,需要提取指定空间位置的像素时,这个位置的经、纬度数据肯定是随机的;而通过argmin()函数,就可以找到.nc文件里面经度、纬度所对应的中,与我们实际需要的经、纬度最接近的那个数值所对应的维的下标。例如,上述代码中,我们希望提取实际经度为106.467位置处的数据;而我这里这个.nc文件,其维中的经度的分辨率是0.1,那它自然没有办法非常精确地确定106.467的位置;所以需要通过argmin()函数,找到与106.467最接近的数据106.5,并进一步确定出这个106.5所在的经度的下标,那么就可以提取出指定的变量了。

  如下图所示,我们通过上述第二种需求,提取出来了目标时间、经度与纬度维下的一个像素。

python读取特定纬度nc文件,GIS数据获取整理,遥感处理与应用,Python学习与应用,Python,NC数据,NetCDF,.nc格式,气象数据,NC数据读取,维度

  那么这个像素值对不对呢?我们可以在ArcGIS中打开这个.nc文件的第一景数据,找到代码中目标经、纬度(也就是longitude_needlatitude_need所指向的数据)所对应的像元,并查看其像素值;如下图所示。

python读取特定纬度nc文件,GIS数据获取整理,遥感处理与应用,Python学习与应用,Python,NC数据,NetCDF,.nc格式,气象数据,NC数据读取,维度

  可以看到,上图在ArcGIS提取出来的像素值,与上上图在Python中提取出来的像素值一致,说明我们的代码无误。

  至此,大功告成。

欢迎关注:疯狂学习GIS文章来源地址https://www.toymoban.com/news/detail-837256.html

到了这里,关于Python读取.nc数据并提取指定时间、经纬度维度对应的变量数值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Arcgis之Python的Arcpy的点线面对象的创建处理和通过pandas读取txt中的经纬度坐标创建几何对象

    前言 本节将介绍点线面对象的创建和处理。创建 点 对象有三个类,分别是 Point 、 Multipoint 、 PointGeometry ,创建 线 对象的类为 Polyline ,创建 面 对象的类为 Polygon 。 一、点对象的创建——Point 点对象经常与光标配合使用。点要素将返回单个点对象而不是点对象数组。而其他

    2024年02月12日
    浏览(40)
  • Python读取指定的TXT文本文件并从中提取指定数据的方法

      本文介绍基于 Python 语言,遍历文件夹并从中找到文件名称符合我们需求的多个 .txt 格式文本文件,并从上述 每一个文本文件 中,找到 我们需要的指定数据 ,最后得到 所有文本文件中 我们 需要的数据的合集 的方法。   首先,我们来明确一下本文的具体需求。现有

    2024年02月14日
    浏览(31)
  • Python根据经纬度在地图上显示(folium)

    1、location地图中心点 经纬度,list 或者 tuple 格式,顺序为 latitude(纬度), longitude(经度) 2、zoom_start地图等级 缩放值,默认为 10,值越大比例尺越小,地图放大级别越大 3、tiles 显示样式,默认*‘OpenStreetMap’*,也就是开启街道显示;也有一些其他的内建地图样式,如’Stamen T

    2024年02月14日
    浏览(40)
  • Python-pdfplumber读取PDF所有内容并自行提取指定内容

    🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:一晌小贪欢的博客主页 👍 该系列文章专栏:Python办公自动化专栏 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 ❤️ 欢迎各位佬关注! ❤️ 最近接到一个需求

    2024年02月15日
    浏览(43)
  • 保姆级教程:python读取并绘制nc数据

    2.利用basemap绘图    3、利用cartopy绘图 利用cartopy绘图的详细内容,可以参考此链接: http://t.csdnimg.cn/GjYUb

    2024年02月05日
    浏览(28)
  • 腾讯地图获得地图经纬度数据进行描边

    登录腾讯地图 微信小程序JavaScript SDK | 腾讯位置服务   接口调用:直接浏览器调用就行 一,可以先通过查询地区名字来获得地区码: https://apis.map.qq.com/ws/district/v1/search?key=你申请获得keykeyword=梁溪区 二,用地区码查询描边经纬度: 你申请获得key https://apis.map.qq.com/ws/distric

    2023年04月24日
    浏览(27)
  • 基于Python的经纬度与xy坐标系相互转换

    代码是已经运行过的,可以直接输入参数使用 注意事项: 经纬度参数不可以写颠倒,否则会由于math.log参数不能为负数和0的原因报错 由于地球半径的不确定性,所以(x,y)与(lon, lat)相互转换会有误差 奉上代码及运行结果: 经纬度转换成xy坐标 实例经维度参数 (114.5456282282352

    2024年02月12日
    浏览(43)
  • 【Python】一行代码计算两经纬度点的距离及夹角

    2022.2.10更新,Python有现成的包可以直接调用。 geographiclib库 https://pypi.org/project/geographiclib/ 用法说明见博客: python 计算地球上两点距离和方位角(bearing)的包geographiclib_梓沂的博客-CSDN博客_geodesic python 通过经纬度计算地图上两点的距离及方位角,百度的结果是许多个人写的函

    2023年04月11日
    浏览(34)
  • 中国各省会城市经纬度数据(附MATLAB代码)

    北京市:北京;天津市:天津;上海市:上海;重庆市:重庆 ;河北省:石家庄 山西省:太原 ;陕西省:西安 ;山东省:济南;河南省:郑州 ; 辽宁省:沈阳 ;吉林省:长春 ;黑龙江省:哈尔滨 ;江苏省:南京 ;浙江省:杭州 ;安徽省:合肥 ;江西省:南昌; 福建省

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包