python gdal nc数据转tif 包括如何获取变量及变量属性

news2025/1/11 22:04:03

文章目录

  • 1 gdal nc转换为tif
  • 2 利用netCDF4获取变量及变量属性
  • 3 进行gregorian时间类型的转换
  • 4 总结

1 gdal nc转换为tif

地理变换是从图像坐标空间(行、列)(也称为(像素、线)到地理参考坐标空间(投影或地理坐标)的仿射变换。

总共包含6个元素

image-20231212154914171

ExportToWkt 是 GDAL(Geospatial Data Abstraction Library)库中的一个函数,用于将空间参考信息导出为 Well-Known Text(WKT)格式。

Well-Known Text(WKT)是一种文本表示形式,用于描述空间参考系统(Spatial Reference System)的信息,包括坐标系、投影和地理转换参数等。WKT 是一种通用的标准,可以在不同的 GIS(地理信息系统)和地理数据处理软件之间共享和交换空间参考信息。
这里以ERA5数据为例(按月获取小时温度数据)
在这里插入图片描述

def nc_to_tif(data, lons, lats, timestamp):
    # 影像的左上角和右下角坐标
    LonMin, LatMax, LonMax, LatMin = [lons.min(), lats.max(), lons.max(), lats.min()]
    lon_number = len(lons)
    lat_number = len(lats)
    # 1 创建tif文件
    driver = gdal.GetDriverByName('GTiff')
    out_tif_name = output_directory + timestamp + '_t2m.tif'
    out_tif = driver.Create(out_tif_name, lon_number-1, lat_number-1, 1, gdal.GDT_Float32)

    # 2 设置影像显示范围[建立仿射变换]
    # 分辨率与原始数据的空间分辨率需要保持一致
    Lon_Res = 0.1
    Lat_Res = 0.1
    geotransform = (LonMin, Lon_Res, 0, LatMax, 0, -Lat_Res)
    out_tif.SetGeoTransform(geotransform)
    # 3 将地理经纬度坐标转换为投影坐标
    projection = gdal.osr.SpatialReference()
    # 4326指'WGS84'
    projection.ImportFromEPSG(4326)
    # 4 为tif数据赋予投影信息
    # 将空间参考以WKT格式输出
    out_tif.SetProjection(projection.ExportToWkt())
    # 5 将数据写入栅格
    out_tif.GetRasterBand(1).WriteArray(data)
    out_tif.GetRasterBand(1).SetNoDataValue(-9999)
    del out_tif

2 利用netCDF4获取变量及变量属性

from netCDF4 import Dataset

# 打开nc文件
nc_file = Dataset("test.nc", "w", format="NETCDF4")
# 获取NC文件的维度信息
print("\n维度信息:")
    for dimname, dim in nc_file.dimensions.items():
    	print(f"{dimname}: {len(dim)}")

# 获取变量信息以及变量的属性信息
print("\n变量信息:")
    for varname, var in nc_file.variables.items():
        print(f"{varname}:")
        print(f"数据类型: {var.dtype}")
        print(f"维度: {var.dimensions}")
        print(f"属性:")
        for attr in var.ncattrs():
            print(f"    {attr}: {getattr(var, attr)}")


# 根据特定的变量名获取变量
data = nc_file.variables['variable_name'][:]
# 根据特定的变量名和特定的属性名获取[对应的属性]
scale_factor = getattr(nc_file.variables['variable_name'], 'scale_factor')

3 进行gregorian时间类型的转换

公历(Gregorian calendar),也称为格里高利历、格列高利历、格雷戈里曆、西曆或新曆,是今天世界上使用最广泛的日历系统。它是由教皇格里高利十三世在1582年颁布的,以修正尤利乌斯日历的缺陷。公历采用365天5小时48分46秒的长度作为一年,并在必要时通过闰年来调整。与其他日历系统相比,公历更为准确,被广泛用于全球大部分国家和文化中。

简而言之,当提到格里高利历(Gregorian calendar)或公历时,通常是指今天全球通用的日期系统,用于标记时间、日期和年份。

进行nc时间维度的改变

利用nc.num2date()将[时间的数值数据]转换为[datetime]对象

 time_new = nc.num2date(nc_file.variables['time'][:], 'hours since 1900-01-01 00:00:00.0').data

image-20231212171722349

4 总结

  1. 对nc数据处理时,需要先判断是否是_FillValue
  2. 很重要: 使用netCDF4进行数据处理时,会自动进行【data×scale_factor+add_offset】的操作,自己不需要再进行处理
  3. 这里遇到了一个问题:按照左上角点的经纬度坐标、行数和列数,最终得到的tif数据的右下角点【经度总是多一份,纬度总是小一份】
    为了避免错误,我用IDL也测试了一下,也是同样的经纬度范围,这个问题先放在这

  • https://gdal.org/tutorials/geotransforms_tut.html
  • Python读取nc文件转tif_l2wlf010_fldk-CSDN博客
  • 使用python进行nc转tif的3种情况解决 - Python技术站 (pythonjishu.com)
  • 利用Python(netCDF4库)读取.nc文件(NetCDF气象数据文件)的基本操作_-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

21.Java程序设计-基于Springboot的校园新闻发布管理系统的设计与实现

摘要: 随着信息时代的发展,校园管理和信息传递对高效的数字化解决方案提出了更高的需求。本研究旨在设计和实现一个基于Spring Boot的校园新闻发布管理系统,以满足学校管理和用户信息获取的日益增长的需求。该系统具备新闻发布、浏览、评论等…

【rabbitMQ】声明队列和交换机

上一篇:springboot整合rabbitMQ模拟简单收发消息 https://blog.csdn.net/m0_67930426/article/details/134904766?spm1001.2014.3001.5501 相关配置环境参考上篇 springAMQP提供了几个类用来声明声明队列,交换机及其绑定关系 声明队列,…

云原生之深入解析Kubernetes的架构及特性

一、kubernetes 架构 从宏观上来看 kubernetes 的整体架构,包括 Master、Node 以及 Etcd。Master 即主节点,负责控制整个 kubernetes 集群,它包括 Api Server、Scheduler、Controller 等组成部分。它们都需要和 Etcd 进行交互以存储数据&…

vs2022番茄助手安装

资源获取: 链接:https://pan.baidu.com/s/1FphMGL692I_JfLW_vqGPYw 提取码:zkw4 安装步骤 1.确保旧版番茄助手插件完全卸载。 2.下载附件“VA_X_Setup2440_0.exe”安装文件,双击安装,Win10以上系统需要【右键-属性】…

推荐一款好用的包含表格识别的OCR网站

在当今数字化的时代,文字和表格识别已经成为了许多行业的关键技术。无论是处理大量的纸质文档,还是从网络上收集数据,OCR(光学字符识别)技术都扮演着重要的角色。然而,对于许多用户来说,OCR软件…

SpringCloud微服务 【实用篇】| Docker启示录

目录 一:Docker启示录 1. Docker启示录 2. Docker和虚拟机的区别 3. Docker架构 4. Centos7安装Docker 4.1. 卸载 4.2. 安装docker 4.3. 启动docker 4.4. 配置镜像加速 前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽…

HarmonyOS4.0从零开始的开发教程11Video组件的使用

HarmonyOS(九)Video组件的使用 概述 在手机、平板或是智慧屏这些终端设备上,媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集,还是视频的播放、切换、循环,亦或是相机的预览、拍照等功能…

06_W5500_DHCP

1.DHCP协议介绍: DHCP(Dynamic Host Configuration Protocol)是一种用于自动分配IP地址和其他网络配置信息的协议。它允许网络中的设备(如计算机、手机、打印机等)在连接到网络时自动获取IP地址、子网掩码、默认网关、…

数据入表 | 详解数据资产会计核算与企业应对

从2015年《促进大数据发展行动纲要》到2022年《数据20条》到2023年8月份出台了《企业数据资源相关会计处理暂行规定》,可见国家层面对数据的重视和探索如何进一步挖掘数据价值,发挥数据的应用潜力。一石激起千层浪,面对如此重要的规定&#x…

C++1114新标准——统一初始化(Uniform Initialization)、Initializer_list(初始化列表)、explicit

系列文章目录 C11&14新标准——Variadic templates(数量不定的模板参数) C11&14新标准——Uniform Initialization(统一初始化)、Initializer_list(初始化列表)、explicit 文章目录 系列文章目录1…

python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接口测…

【Java 基础】32 定时调度

文章目录 Timer 类创建 Timer注意事项 ScheduledExecutorService 接口创建 ScheduledExecutorService注意事项 选择合适的定时调度方式Timer 的适用场景ScheduledExecutorService 的适用场景 总结 在软件开发中,定时任务是一种常见的需求,用于周期性地执…

了解振弦采集仪:工程质量控制的得力助手

了解振弦采集仪:工程质量控制的得力助手 振弦采集仪是一种专门用于工程质量控制的仪器设备,它可以帮助工程师监测和评估结构物的振动性能。它的工作原理是通过将传感器固定在结构物上的振弦上,然后测量振弦的振动频率、振动幅度等参数&#…

GPTs prompts灵感库:创意无限,专业级创作指南,打造吸睛之作的秘诀

GPTs prompts灵感库:创意无限,专业级创作指南,打造吸睛之作的秘诀 优质prompt展示 1.1 极简翻译 中英文转换 你是一个极简翻译工具,请在对话中遵循以下规则: - Prohibit repeating or paraphrasing any user instru…

mysql更新某个字段=这个字段+字符串

当我们像c#中用拼接执行sql语句时,如下: UPDATE abpusers set UserNameqyUserName where UserNameqy-wh 会出现以下错误: 在mysql中通过concat函数来实现 UPDATE abpusers set UserNameCONCAT(qy_,UserName) where UserNameqy-wh

Unity中实现ShaderToy卡通火(总结篇)

文章目录 前言一、把卡通火修改为后处理效果1、在Shader属性面板定义属性接收帧缓存纹理2、在片元着色器对其纹理采样后,与卡通火相加输出请添加图片描述 二、我们自定义卡通火1、修改 _CUTOFF 使卡通火显示在屏幕两侧2、使火附近屏幕偏红色 前言 在之前的文章中&a…

PP材料粘接ABS材料使用UV胶的好处?

跟随着现阶段材料的不断发展更迭,PP材料应用越来越广,生产效率要求越来越高,为了加快生产,提高效率,PP材料的粘接上使用UV胶粘接PP(聚丙烯)和ABS(丙烯腈-丁二烯-苯乙烯共聚物&#x…

AI日报:人工智能与新材料的发现

文章目录 总览人工智能正在革命性地发现新的或更强的材料,这将改变制造业。更坚韧的合金问题研究解决方案 新材料人工智能存在的挑战方法探索 日本的研究人员正在使用人工智能制造更强的金属合金或发现新材料,并彻底改变制造过程 总览 日本的研究人员开…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中,有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块,但它的安装可能会因为各种原因而失败,导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

【Zerotier】自建PLANET服务器内网地址连接

之前已经完成了【Zerotier】通过docker自建PLANET服务器,但是遇到一个问题,因为各种原因,内网里面的ZeroTier Client无法通过PLANET服务器的公网地址连接,愁怀了这下。在经过多方测试验证后,可以采取重新生成一个PLANE…