遥感-nc格式文件转tif的应用程序

本文介绍了一个Python脚本,它允许用户选择nc文件的工作路径和输出路径,然后自动转换nc文件中的数据(如经纬度和排放量)为tif格式。脚本适应不同nc文件的数据结构,并使用GDAL库进行数据处理和地理坐标系统的设置。
摘要由CSDN通过智能技术生成
该程序运行后弹出界面,选择工作路径(nc文件所在文件夹)选择输出路径(tif文件输出文件夹)
点击运行后,开始自动转换:
面对不同的NC文件,其数据结构不同:# var_lon = f['longitude'][:] # var_lat = f['latitude'][:] # data = f['emission'][1, :, :]只需修改此部分即可





import tkinter as tk
from tkinter import *
from tkinter import filedialog
import numpy as np
import netCDF4 as nc
from osgeo import gdal, osr
import time
import os


# 选择路径函数
def select_path1():
    global path_1
    path_1 = filedialog.askdirectory()
    print("工作路径:", path_1)
    return (path_1)


def select_path3():
    global path_3
    path_3 = filedialog.askdirectory()
    print("输出路径:", path_3)
    return (path_3)


# 求nc转tif  面对不同的nc文件,其数据集结构不同,只需修改
#         var_lon = f['longitude'][:]
#         var_lat = f['latitude'][:]
#         data = f['emission'][1, :, :]
# 这三个部分即可,其他地方不需要修改;
def nctif(x, y):
    folder_path = x  # 指定文件夹路径
    file_path_list = []  # 存储文件路径的列表
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith(".nc"):
                file_path = os.path.join(root, file)
                file_path_list.append(file_path)
    for i in file_path_list:  # 读取nc
        data = '"' + i + '"'
        print(data)
        f = nc.Dataset(i)
        date = i[40:44] + i[46:48]  # 提取2019和01作为日期
        # 读取经纬度及排放量
        var_lon = f['longitude'][:]
        var_lat = f['latitude'][:]
        data = f['emission'][1, :, :]
        # 通过np包下的asarray将数据转换为数组
        data_arr = np.asarray(data)
        # 影像的左上角和右下角坐标
        LonMin, LatMax, LonMax, LatMin = [var_lon.min(), var_lat.max(), var_lon.max(), var_lat.min()]

        # 分辨率计算
        N_Lat = len(var_lat)
        N_Lon = len(var_lon)
        Lon_Res = (LonMax - LonMin) / (float(N_Lon) - 1)
        Lat_Res = (LatMax - LatMin) / (float(N_Lat) - 1)
        # 创建.tif文件
        driver = gdal.GetDriverByName('GTiff')
        out_tif_name = y + '/' + date + ".tif"
        out_tif = driver.Create(out_tif_name, N_Lon, N_Lat, 1, gdal.GDT_Float32)  # 创建框架

        # 设置影像的显示范围
        # Lat_Res一定要是-的
        geotransform = (LonMin, Lon_Res, 0, LatMax, 0, -Lat_Res)
        out_tif.SetGeoTransform(geotransform)  # 写入仿射变换参数

        # 获取地理坐标系统信息,用于选取需要的地理坐标系统
        srs = osr.SpatialReference()
        srs.ImportFromEPSG(4326)  # 定义输出的坐标系为"WGS 84",AUTHORITY["EPSG","4326"]
        out_tif.SetProjection(srs.ExportToWkt())  # 给新建图层赋予投影信息

        # 数据写出
        out_tif.GetRasterBand(1).WriteArray(data_arr)  # 将数据写入内存,此时没有写入硬盘
        out_tif.FlushCache()  # 将数据写入硬盘
        out_tif = None  # 注意必须关闭tif文件


# 定义全局变量来存储路径
path_1 = None
path_3 = None

# 创建窗口
window = tk.Tk()

# 设置长宽
window.geometry("400x400")
# 设置颜色
window.configure(background="white")
# 窗口标题
window.title("nc转tif")
LABLE = Label(window, bg="#8c52ff", fg="#ffffff", text="欢迎使用nc转tif程序---CUIT", font=("Helvetica", 15, "bold"), pady=10)
LABLE.place(x=90, y=0)
# 工作路径
button1 = tk.Button(window, text="工作路径", command=None)
button1.place(x=55, y=60)
button1.configure(command=select_path1)
# 输出路径
button3 = tk.Button(window, text="输出路径", command=None)
button3.place(x=55, y=180)
button3.configure(command=select_path3)

# 运行
button4 = tk.Button(window, text="运行", command=None)
button4.place(x=200, y=200)
button4.configure(command=lambda: nctif(path_1, path_3))

window.mainloop()

如果运行程序时,遇到相关问题,欢迎私信我进行讨论!后续会制作各种小程序,处理RS数据处理中的:均值处理、投影变换、拼接、裁剪等小程序;欢迎大家关注!

### 回答1: NC格式是一种常见的气象、海洋等领域数据格式,而TIFF则是一种图像文件格式。如果要将NC格式的数据换为TIFF格式的图像,需要用到MATLAB软件。 MATLAB软件提供了nc文件读写函数,可以读取NC格式的数据文件。通过调用这些函数,可以将NC格式的数据换成MATLAB的数据格式。接着将MATLAB的数据保存为TIFF格式的图像即可。 具体的步骤如下: 1.使用MATLAB的nc文件读写函数,读取NC格式的数据文件,将其化为MATLAB的数据格式。 2.为了将数据保存为TIFF格式的图像,需要根据数据的分辨率、大小等因素创建一个新的空图像。 3.利用MATLAB的图像处理函数,将数据映射到新创建的图像上。 4.使用MATLAB的imwrite函数,保存映射后的图像为TIFF格式。 需要注意的是,在这个过程,需要确保数据的空间参考、投影等信息与图像一致,否则会导致产生误差。 通过这些步骤,就可以将NC格式的数据换成TIFF格式的图像,方便后续处理及展示。 ### 回答2: NC格式是一种常见的气象、海洋、地球物理等科学领域数据格式,而tif格式是一种光栅图像格式。如果需要将NC格式的数据换成tif格式,则需要借助Matlab等软件进行处理。 具体步骤如下: 1. 导入NC格式数据。Matlab提供了ncread函数,可以读取NC格式数据。通常情况下,使用ncinfo函数先查看NC文件的元数据信息,以便正确读取和处理数据。 2. 处理NC数据。根据具体需求,对NC数据进行处理。例如,可以进行数据筛选、平均、插值、重采样等操作。 3. 生成tif格式数据。对处理后的数据,可以使用Matlab提供的imwrite函数将其换成tif格式数据。需要注意的是,imwrite函数要求输入数据必须为二维矩阵或三维数组。 4. 保存tif格式数据。将生成的tif格式数据保存到指定的路径下,以便后续使用。 总之,将NC格式数据换成tif格式需要一定的编程技巧和处理经验,但是Matlab提供了很好的支持,在掌握相关技巧之后,可以进行快速、高效的数据换。 ### 回答3: nc格式是一种常见的科学数据格式,常用于气象、海洋学、地质学等领域。而tif格式是一种常用的图像格式,我们通常将遥感影像、卫星影像等数据换为tif格式。 在matlab进行nc格式tif的操作,可以使用matlab自带的netcdf工具箱。具体操作步骤如下: 1. 导入nc格式数据:使用matlab的netcdf.open函数打开nc格式文件,使用netcdf.getVar函数读取数据。 2. 处理数据:由于nc格式数据通常为多维数组,需要使用matlab的矩阵操作函数对数组进行处理。 3. 导出tif格式数据:使用matlab的imwrite函数将处理后的数据输出为tif格式文件。 需要注意的是,在进行nc格式tif的过程,需要根据数据特点对matlab代码进行相应的修改和调整,并确保数据处理的精度和准确性。 综上所述,nc格式换为tif格式需要借助matlab提供的工具以及相应的操作技巧,以完成数据的换和处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值