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格式数据文件的基本信息,如变量、维、属性等——这里具体打印出来的情况如下图所示。

  其中,在上图我们需要重点关注紫色框内的内容。首先,在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所在的经度的下标,那么就可以提取出指定的变量了。

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

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

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

  至此,大功告成。

欢迎关注:疯狂学习GIS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/406783.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue 中实现音视频播放进度条(满足常见开发需求)

由于开发需要,作者封装了一个音视频播放进度条的插件,支持 vue2 及 vue3 ,有需要的朋友可联系作者,下面是对该款插件的介绍。 插件默认样式👇(插件提供了多个配置选项,可根据自身需求进行个性化…

临时内核映射

临时内核映射与永久内核映射的区别是,临时内核映射可以在中断处理程序和可延迟函数内部使用,它不堵塞当前进程。 一 原理介绍 临时内核映射的线性地址在永久内核映射的后面,范围是[FIXADDR_START, FIXADDR_TOP),其基本逻辑是获取…

Zookeeper分布式一致性协议ZAB源码剖析

Zookeeper分布式一致性协议ZAB源码剖析 ZAB协议 ZK的强一致性 ZK严格来讲并不是实时强一致性,而是写时强一致性,读时顺序一致性 ZAB协议(原子广播协议),Paxos算法的一种简化实现,包括两种基本模式 消息广播 消息广播过程中使用类…

“IT行业职业发展的黄金之路:哪些证书能为你增光添彩?“

文章目录 每日一句正能量前言1、浙大计算机程序设计能力考试证书(PAT)2、全国计算机等级考试证书(NCRE)3、计算机技术与软件专业资格考试证书(软考)4、通信专业技术人员职业水平证书5、全国计算机应用水平考试证书(NIT…

优秀实践| 运营商核心系统国产数据库迁移实践

作者介绍 陕西移动信息技术部 张云川 陕西移动信息技术部 王永强 新炬网络中北三部 张建 随着国家对自主可控战略的深入推进,笔者所在省份聚焦数据库国产化替换,全面加速数据库国产化替换进程。以核心系统带动周边系统,成功在能力运营中…

详解 CSS 的背景属性

详解 CSS 的背景属性 背景颜色 语法: background-color: [指定颜色]; 注:默认是 transparent (透明) 的,可以通过设置颜色的方式修改 示例代码: 运行效果: 背景图片 语法:background-image: url(...); url 可以是绝对路径 也可…

【Java程序设计】【C00284】基于Springboot的校园疫情防控管理系统(有论文)

基于Springboot的校园疫情防控管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园疫情防控系统 本系统分为系统功能模块、管理员功能模块以及学生功能模块。 系统功能模块:在系统首页可以查…

后端经典面试题合集

目录 1. Java基础1-1. JDK 和 JRE 和 JVM 分别是什么,有什么区别?1-2. 什么是字节码?采用字节码的最大好处是什么? 1. Java基础 1-1. JDK 和 JRE 和 JVM 分别是什么,有什么区别? JDK 是Java开发工具包&am…

使用 kind 集群安装运行极狐GitLab Runner【下】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 上一篇内容中,我们已经利用 kind 创建好了一个本地…

瑞_23种设计模式_装饰者模式

文章目录 1 装饰者模式(Decorator Pattern)1.1 介绍1.2 概述1.3 装饰者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析5 总结5.1 装饰者模式的优缺点5.2 装饰者模式的使用场景5.3 装饰者模式 VS 代理模式 &#x…

Java日志技术

概况 把程序运行的信息,记录到文件中,方便程序员定位bug,并了解程序的执行情况等 什么是日志 好比生活中的日记,可以记录你生活中的点点滴滴程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的…

第四十回 宋江智取无为军 张顺活捉黄文炳-使用python集合计算人员变动

白龙庙聚会,梁上好汉人多势众,听说江州城里军队追赶过来了,大家一起出去迎敌。李逵一马当先杀入人群,花荣一箭射倒领头的马军,其它马军掉头就走,把自己的步兵冲倒了一半。大家一直杀到江州城边,…

Android | ArcGIS入门

一、概述 ArcGIS是由Esri开发的地理信息系统(GIS)软件。它用于制图、空间分析和数据可视化。ArcGIS允许用户以各种格式创建、管理、分析和共享地理信息。它通常用于城市规划、环境管理和应急响应等领域。该软件包括一系列工具,用于创建地图、…

KTV点歌系统vue+springboot音乐歌曲播放器系统

目前现有的KTV点歌系统对于用户而言其在线点歌流程仍然过于繁琐,对于歌曲而言其系统安全性并不能保障。同时整套系统所使用的技术相对较为落后,界面不能动态化展示。相比较于其它同类型网站而言不能体现技术先进性。 1.2 项目目标 KTV点歌系统的后台开发…

C语言调试

目录 一.Debug和Release介绍 二.Windows环境调试介绍 三.窗口介绍 (1)自动窗口和局部变量窗口 (2)监视窗口 (3)调用堆栈 (4)查看汇编信息 (5)查看寄存…

Linux笔记之LD_LIBRARY_PATH详解

Linux笔记之LD_LIBRARY_PATH详解 文章目录 Linux笔记之LD_LIBRARY_PATH详解1.常见使用命令来设置动态链接库路径2.LD_LIBRARY_PATH详解设置 LD_LIBRARY_PATH举例注意事项 3.替代方案使用标准路径编译时指定链接路径优先使用 rpath 还是 runpath?注意事项 1.常见使用…

四信AI智能识别及计量监测设备,助力入河入海排污口规范化建设

随着城市化和工业化的快速发展,污水排放已成为主要的环境问题之一。2022年,国务院办公厅发布《关于加强入河入海排污口监督管理工作的实施意见》,提出“加强科技研发,开展各类遥感监测、水面航测、水下探测、管线排查等实用技术和…

Curator基本使用

文章目录 1. 基本操作1.1 建立连接1.2 创建结点1.3 查询结点查询数据查询子结点查看结点信息 1.4 修改结点普通修改带乐观锁的修改 1.5 删除删除单个结点删除带子结点的结点必须成功的删除带回调函数的删除 2. 监听器事件2.1 NodeCache单一结点连续监听2.2 PathChildrenCache监…

GEE入门篇|遥感专业术语(实践操作2):空间分辨率(Spatial Resolution)

目录 空间分辨率(Spatial Resolution) 1.MODIS(搭载在Aqua 和 Terra 卫星上) 2. TM(搭载在早期LandSat卫星上) 3.MSI(搭载在在Sentinel-2 卫星上) 4.NAIP 空间分辨率&#xff0…

基于qt的图书管理系统----03核心界面设计

参考b站:视频连接 源码github:github 目录 1 添加软件图标2 打包程序3 三个管理界面设计4 代码编写4.1 加载界面4.2 点击按钮切换界面4.3 组团添加样式4.4 搭建表头4.5 表格相关操作 从别人那里下载的项目会有这个文件,里边是别人配置的路径…